В графическом интерфейсе вы должны избегать использования 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_())