Как выполнить код в file1 / class1 / method1, который вызывает виджет PyQT в file2 / class2 после закрытия GUI? - PullRequest
0 голосов
/ 17 июня 2020

Ряд сообщений уже касается 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...