我有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(),它可以正常工作。