首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python & Pyqt5 :文件存在后创建按钮

Python & Pyqt5 :文件存在后创建按钮
EN

Stack Overflow用户
提问于 2020-01-15 16:48:47
回答 1查看 119关注 0票数 0

我正在尝试使用Pyqt5构建一个简单的应用程序。我的目的是,当我点击Listen按钮,打开我的另一个可执行文件(从另一个平台构建),并每秒检查a.txt是否存在。如果存在,我想在当前界面上创建一个新按钮。

现在,当我单击Listen按钮时,我可以打开我的另一个exe (我将在这里使用notepad作为最小的例子),我的应用程序开始总是检查a.txt是否存在。几秒钟后,我从另一个脚本创建了a.txt。我的问题是,新按钮没有出现。但是如果我关闭空的记事本,新的按钮就会出现。

我的简单界面脚本:

代码语言:javascript
复制
from PyQt5 import QtCore, QtWidgets
import sys
import time
import subprocess
import os

class ListenWindow(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(ListenWindow, self).__init__(parent)
        self.setWindowTitle("Listen")

        self.button_login = QtWidgets.QPushButton('Listen', self)
        font3 = self.button_login.font()  # lineedit current font
        font3.setPointSize(10)  # change it's size
        self.button_login.setFont(font3)
        self.button_login.setFixedSize(200, 50)
        self.button_login.clicked.connect(self.startToListen)

        self.v_box1 = QtWidgets.QVBoxLayout(self)
        self.v_box1.addWidget(self.button_login)

        self.h_box1 = QtWidgets.QHBoxLayout(self)
        self.v_box1.addLayout(self.h_box1)

    def startToListen(self):
        FNULL = open(os.devnull, 'w')
        args = "notepad"
        subprocess.call(args, stdout=FNULL, stderr=FNULL, shell=False)

        while not os.path.exists('C:/Users/Wicaledon/PycharmProjects/abc/a.txt'):
            time.sleep(1)

        if os.path.isfile('C:/Users/Wicaledon/PycharmProjects/abc/a.txt'):
            self.buttonSeq = QtWidgets.QPushButton('Start Sequence', self)
            font8 = self.buttonSeq.font()  # lineedit current font
            font8.setPointSize(10)  # change it's size
            self.buttonSeq.setFont(font8)
            self.buttonSeq.setFixedSize(200, 50)
            self.h_box1.addWidget(self.buttonSeq, 0, QtCore.Qt.AlignCenter)
        else:
            raise ValueError("%s isn't a file!" % 'C:/Users/Wicaledon/PycharmProjects/abc/a.txt')

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = ListenWindow()
    window.setWindowTitle('Login')
    window.show()
    sys.exit(app.exec_())

我创建a.txt文件的脚本:

代码语言:javascript
复制
f=open("a.txt", "a+")
for i in range(2):
     f.write("Appended line %d\r\n" % (i+1))
f.close()

我的错在哪里?你能帮帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2020-01-15 19:57:09

您尝试使用subprocess.call()打开该程序。不要使用call(),它将等待进程完成。

如果您不想等待,请使用subprocess.Popen()

代码语言:javascript
复制
subprocess.Popen(["notepad"], stdout=open(os.devnull, 'w'), stderr=subprocess.STDOUT, shell=False)

或者简单地使用os.startfile:

代码语言:javascript
复制
os.startfile("C:/Windows/system32/notepad.exe")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59747776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档