Ряд сообщений уже касается closeEvent, но он будет выполнен в file2 / class2 после закрытия виджета в этом объекте. Я хочу, чтобы окно из class2 закрылось, затем вернуло поток в метод class1, , а затем запустил следующую строку после .show () . Вместо этого метод в class1 запускает весь метод (включая то, что находится после show ()), и только затем показывает и работает с виджетом из class2.
Вот файл главного окна:
import sys
import collections
from PyQt5 import QtWidgets
from Values import Values
from Window2 import Window2
class Window1(QtWidgets.QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
def initUI(self):
self.window2button = QtWidgets.QPushButton(f'{Values.settings["One"]} Click me', self)
self.window2button.clicked.connect(self.window2buttonPressed)
window1HBox = QtWidgets.QHBoxLayout()
window1HBox.addWidget(self.window2button)
self.setGeometry(300, 100, 100, 100)
self.show()
def window2buttonPressed(self):
print("Button pressed")
print(f'Initial value: {Values.settings["One"]}')
OCproductsDialog = Window2(self)
OCproductsDialog.show()
print(f'Final value: {Values.settings["One"]}')
self.window2button.setText(f'{Values.settings["One"]} Click me')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
win = Window1()
sys.exit(app.exec_())
Вот файл вторичного окна:
from PyQt5 import QtWidgets
from Values import Values
class Window2(QtWidgets.QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.setModal(True)
self.initUI()
def initUI(self):
self.setOneLineEdit = QtWidgets.QLineEdit(self)
self.setOneLineEdit.setText(str(Values.settings["One"]))
self.setOneLineEdit.returnPressed.connect(self.closeWindow2)
VBox = QtWidgets.QVBoxLayout()
VBox.addWidget(self.setOneLineEdit)
Values.settings["One"] = self.setOneLineEdit.text()
self.setLayout(VBox)
self.setGeometry(250, 100, 100, 100)
def closeWindow2(self):
print(f'Value changed to {self.setOneLineEdit.text()}')
self.close()
А вот третий файл, содержащий значения классов, которые передаются между Window1 и Window2:
class Values:
settings = {}
settings["One"] = 1
What I Надеюсь увидеть, когда я нажму кнопку в Window1, это будет следующее:
Button pressed
Initial value: 1
Value changed to 2
Final value: 2
... и изменить значение кнопки в Window1. Но вот что я вижу:
Button pressed
Initial value: 1
Final value: 1
Value changed to 2
... и кнопка не изменилась. В идеале, я полагаю, я хотел бы передать сигнал от Window2 (который снова - в отличие от всех примеров, которые я изучал здесь - находится в отдельном файле и классе от Window1), чтобы изменить значение в кнопке на основе нового значения. настройки , даже не закрывая Window2 , но я бы согласился на обновление Window1 после закрытия 2.