Как сделать не основное окно с функциональными кнопками на PyQt?
Я хочу создать в приложении окно, которое появляется по нажатию кнопки.
Это окно также должно содержать функциональные кнопки.
Объект приложения уже создан, так как, опять же, я хочу создать не основное окно. Когда я создаю QWidget, окно появляется на долю секунды и исчезает.
Пример кода, в который нужно добавить окно:
from PyQt5 import QtCore, QtWidgets
class MyWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.label = QtWidgets.QLabel("Моя надпись!")
self.label.setAlignment(QtCore.Qt.AlignHCenter)
self.BtnQuit = QtWidgets.QPushButton("Закрыть окно")
self.BtnContinue = QtWidgets.QPushButton("К другому окну")
self.vbox = QtWidgets.QVBoxLayout()
self.vbox.addWidget(self.label)
self.vbox.addWidget(self.BtnQuit)
self.vbox.addWidget(self.BtnContinue)
self.setLayout(self.vbox)
self.BtnQuit.clicked.connect(QtWidgets.qApp.quit)
#С помощью этой кнопки мы будем переходить на другое окно (Вместо выхода)
self.BtnContinue.clicked.connect(QtWidgets.qApp.quit)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.setWindowTitle("Окно для открытия другого окна")
window.resize(300, 100)
window.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Создайте второе окно, пусть это будет класс
SecondWindow().Создайте экземпляр класса:
self.secondWindow = SecondWindow()Сделайте привязку сигнала и слота:
self.btnContinue.clicked.connect(self.qo_second_window)В методе
qo_second_window()откройте второе окно:self.secondWindow.show()
from PyQt5 import QtCore, QtWidgets
class SecondWindow(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('SecondWindow')
self.resize(400, 400)
self.label = QtWidgets.QLabel("Моя надпись SecondWindow!")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.pushButton = QtWidgets.QPushButton("Вернуться в MyWindow")
self.vbox = QtWidgets.QVBoxLayout(self)
self.vbox.addWidget(self.label)
self.vbox.addWidget(self.pushButton)
class MainWindow(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.label = QtWidgets.QLabel("Моя надпись!")
self.label.setAlignment(QtCore.Qt.AlignHCenter)
self.btnQuit = QtWidgets.QPushButton("Закрыть окно")
self.btnQuit.clicked.connect(QtWidgets.qApp.quit)
# С помощью этой кнопки мы будем переходить на другое окно
self.btnContinue = QtWidgets.QPushButton("К другому окну")
self.btnContinue.clicked.connect(self.qo_second_window)
self.vbox = QtWidgets.QVBoxLayout(self)
self.vbox.addWidget(self.label)
self.vbox.addWidget(self.btnQuit)
self.vbox.addWidget(self.btnContinue)
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.secondWindow = SecondWindow()
self.secondWindow.pushButton.clicked.connect(self.qo_main_window)
def qo_second_window(self):
self.secondWindow.show()
self.hide()
def qo_main_window(self):
self.show()
self.secondWindow.hide()
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.setWindowTitle("Окно для открытия другого окна")
window.resize(300, 100)
window.show()
sys.exit(app.exec_())

