Python & Pyqt5: кнопка «Создать» после того, как файл существует - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь создать простое приложение, используя Pyqt5. Моя цель, когда я нажимаю кнопку Listen, открываю другой исполняемый файл (созданный на другой платформе) и проверяю каждую секунду, существует ли a.txt или нет. Если существует; Я хочу создать новую кнопку на текущем интерфейсе.

Теперь, когда я нажимаю кнопку «Прослушать», я могу открыть другой исполняемый файл (здесь я буду использовать notepad для минимального примера), и мое приложение всегда начинает проверять a.txt существует. Через несколько секунд я создаю a.txt из другого скрипта. Моя проблема в том, Новая кнопка не появляется. Но если я закрою пустой блокнот, появится новая кнопка.

Мой скрипт для простого интерфейса:

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 файла:

f=open("a.txt", "a+")
for i in range(2):
     f.write("Appended line %d\r\n" % (i+1))
f.close()

Где моя вина? Вы можете мне помочь?

1 Ответ

0 голосов
/ 15 января 2020

Вы пытаетесь открыть программу с помощью subprocess.call(). Не используйте call(), он будет ждать завершения процесса.

Используйте подпроцесс . Откройте () , если не хотите ждать:

subprocess.Popen(["notepad"], stdout=open(os.devnull, 'w'), stderr=subprocess.STDOUT, shell=False)

или просто используйте файл os.startfile:

os.startfile("C:/Windows/system32/notepad.exe")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...