Qt GUI内循环?

时间:2018-11-04 02:25:29

标签: python pyqt pyqt5

我想要实现的是Qt Widget循环。

简单的示例:

UI_dialog是QDialog,接受后将打开UI_mainwindow,它是QMainWindow。

UI_mainwindow中有一个按钮,如果单击该按钮,它将关闭UI_mainwindow并返回到UI_dialog。

我到目前为止所做的事情:

我尝试过:

在包含两个UI对象的Qthread中创建while循环,在UI_mainwindow内调用UI_dialog(有点成功,但有时可能由于我的糟糕设计而崩溃)

1 个答案:

答案 0 :(得分:0)

在GUI中,您必须避免使用while True,因为GUI已经具有内部while True,它使您可以侦听事件并根据其执行内部任务。另一方面,线程应该是您的最后一个选择,因为GUI不应直接从另一个线程更新,它仅应在有阻止任务时使用。

在Qt的情况下,有允许更改通知的信号,它将连接到函数,以便在发出信号时调用后者。

from PyQt5 import QtWidgets


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.button = QtWidgets.QPushButton("Press me")
        self.setCentralWidget(self.button)
        self.button.clicked.connect(self.close)

class Dialog(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        buttonBox = QtWidgets.QDialogButtonBox()
        buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
        buttonBox.accepted.connect(self.accept)
        buttonBox.rejected.connect(self.reject)
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(buttonBox)


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w1 = MainWindow()
    w2 = Dialog()
    w1.button.clicked.connect(w2.show)
    w2.accepted.connect(w1.show)
    w2.show()
    sys.exit(app.exec_())