PyQT открытие нового окна
есть два окна созданных в qt designer, конвертированных в .py первое с кнопкой и второе только с лейблом, по нажатию на кнопку должно появляться второе окно, все запускаю через отдельный py файл,максимальный результат получился когда все содержимое второго файла перенес в первый и вызвал привязав событие к нажатию кнопки, НО и тут возникла проблема так как окно открывается но на доли секунды, в чем моя ошибка? Или как лучше все это переписать
import sys
from win1 import*
import time
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
def test():
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
iu = Ui_Form()
iu.setupUi(Form)
Form.show()
print('done')
sys.exit(app.exec())
ui.pushButton.clicked.connect(test)
sys.exit(app.exec())
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
Вам нужно импортировать класс с label в файле с классом с button и создать у класса с button схожую функцию:
def run_label(self):
self.child_window = LabelWindow()
self.child_window.show()
И присоединить событие на клик кнопки:
class ButtonWindow(...):
def __init__(self):
...
button.clicked.connect(self.run_label)
Получается такая схема:
# main.py
import sys
from PyQt5 import QtWidgets
from mainUi import ButtonWindow
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = ButtonWindow()
window.show()
sys.exit(app.exec_())
# mainUi.py
import sys
from PyQt5 import QtWidgets
from secondUi import LabelWindow
class ButtonWindow(QtWidgets.QWidget):
def __init__(self):
super().__init__()
button = QtWidgets.QPushButton('Button')
button.clicked.connect(self.run_label)
layout = QtWidgets.QVBoxLayout()
layout.addWidget(button)
self.setLayout(layout)
def run_label(self):
self.second_window = LabelWindow()
self.second_window.show()
# secondUi.py
import sys
from PyQt5 import QtWidgets
class LabelWindow(QtWidgets.QWidget):
def __init__(self):
super().__init__()
label = QtWidgets.QLabel('Label')
layout = QtWidgets.QVBoxLayout()
layout.addWidget(label)
self.setLayout(layout)