Я создал небольшой проект pyqt5. Вот PrintScreen приложения во время работы:Общайтесь между двумя окнами без нарушения класса инкапсуляции
Когда пользователь нажимает на QPushButton
из главного окна, появится диалоговое окно, и пользователь пишет что-то в QlineEdit
. Затем, щелкая по окну QPushButton
диалогового окна, диалоговое окно отправляет сигнал в главное окно и удаляется. Сигнал содержит текст, набранный пользователем.
Вот описание моих двух классов, которые очень просто:
Класс MainWindow.
Класс DialogWindow (я хочу создать свой собственный Dialog Class без использования ранее существующих окон Dialog).
Мой главный сценарий
У меня есть несколько вопросов:
ли это правильный способ использования сигналов для того, чтобы общаться между окнами? Я не думаю, что я нарушаю инкапсуляцию класса. Однако я не хотел бы подключить сигнал на дочерний класс, написав:
self.mySignal.connect(parent.updatelabelAnswer)
В этой строке я использую атрибут parent
- это нормально? Мне кажется, что это не очень хороший способ использовать сигналы.
Мой второй вопрос:
Правильно ли я позвонить self.deleteLater()
в on_pushButton_clicked
слот DialogWindow
? Кажется, нет, поскольку я проверил с интерактивной оболочкой python, и объект myDialogWindow
по-прежнему доступен.
Проверьте свой ответ на эту тему [здесь] (http://stackoverflow.com/a/35744748/1559401). Что касается 'deleteLater()', хотя слоты можно вызывать вручную, не выделяя ни одного, это вообще не нужно и не знаю, почему вы это делаете здесь. : P Также, пожалуйста, не публикуйте ** скриншоты ** вашего кода, когда вы можете просто скопировать его здесь. Это облегчает людям работу с ним и быстрее решать вашу проблему. – rbaleksandar
благодарим за ответ. Мне кажется, что я не могу использовать третий скрипт для подключения двух виджетов, потому что экземпляр диалогового окна будет создан только при нажатии на кнопку главного окна, поэтому я должен создать этот экземпляр в слоте on_pushButton_clicked , Для удаления вопроса, как я могу удалить экземпляр диалогового окна? Я вставил код, потому что у меня он был с другого компьютера: p. Но вы правы, должно быть лучшее решение – Matias