Qt GUI внутри цикла? - PullRequest
       8

Qt GUI внутри цикла?

0 голосов
/ 04 ноября 2018

Чего я хочу добиться, так это цикла Qt Widget.

Простой пример:

UI_dialog - это QDialog, и после принятия он откроет UI_mainwindow, которое является QMainWindow.

В UI_mainwindow есть кнопка, и при щелчке она закроет UI_mainwindow и вернется к UI_dialog.

Что я сделал до сих пор:

Я пробовал:

создать цикл while в Qthread, который содержит два объекта пользовательского интерфейса, вызывающих UI_dialog внутри UI_mainwindow (это успешно, но иногда может произойти сбой из-за моего плохого дизайна)

1 Ответ

0 голосов
/ 04 ноября 2018

В графическом интерфейсе вы должны избегать использования True, поскольку GUI уже имеет внутреннее значение True, что позволяет прослушивать события и в соответствии с этим выполнять внутренние задачи. С другой стороны, потоки должны быть вашим последним вариантом, поскольку графический интерфейс не должен обновляться непосредственно из другого потока, его следует использовать только при наличии задачи блокировки.

В случае 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_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...