PyQT открытие нового окна

Рейтинг: -1Ответов: 1Опубликовано: 08.06.2023

есть два окна созданных в 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())

Ответы

▲ 0Принят

Вам нужно импортировать класс с 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)