当shell代码执行时,PyQt5无法打开窗口

时间:2016-12-12 10:10:27

标签: python subprocess pyqt5

我有PyQt应用程序和主窗口。当我尝试执行shell代码并打开新窗口以显示执行状态(加载条的类型)时,新窗口无法正常工作:它无法显示元素并卡住或只是关闭。 这是我的代码示例:

class Command(object):
    ...
    def executeCommand(self):
        self.loading = LoadWindow()
        self.proc = subprocess.Popen(self.cmd, stdin = subprocess.PIPE, stdout = subprocess.PIPE, shell = True)
        self.proc.communicate()
        self.loading.close()

class Plugin(QWidget):
    ...
    def run(self):
        ...
        cmd = Command()
        cmd.makeCommand()
        cmd.executeCommand()
        return

class LoadWindow(QWidget):

    def __init__(self):
        super(QWidget, self).__init__()
        self.initUI()

    def initUI(self):
        self.pbar = QProgressBar(self)
        self.pbar.setGeometry(20, 20, 160, 20)
        self.pbar.setRange(0,0)
        self.pbar.setAlignment(QtCore.Qt.AlignCenter)

        self.btn = QPushButton('Cancel', self)
        self.btn.setGeometry(70, 50, 60, 20)
        self.btn.clicked.connect(self.Cancel)

        self.setGeometry(300, 300, 200, 80)
        self.setWindowTitle('Loading...')
        self.show()

我尝试在调用新窗口并在新线程中打开新窗口后添加一些延迟,但得到了相同的结果。如果我在主循环中调用没有子进程的LoadWindow(),它可以正常工作。

0 个答案:

没有答案