Как кнопкой вызвать другое окно в PyQt5
Мне надо, чтобы при нажатии на кнопку вызывалось второе окно.
Пробовал вот так:
def info_win_btn(self):
self.ui.inst.clicked.connect(lambda: self.show_info())
@staticmethod
def show_info():
info = QtWidgets.QApplication([])
window_info = Instruction()
window_info.show()
# там еще методов много
class Instruction(QtWidgets.QMainWindow):
def __init__(self):
super(Instruction, self).__init__()
self.inst_ui = inst.Ui_MainWindow()
self.inst_ui.setupUi(self)
if __name__ == '__main__':
app = QtWidgets.QApplication([])
window = Application()
window.show()
sys.exit(app.exec_())
Вот пример чтобы попробовать:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object): # главное окно
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(220, 190, 351, 141))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "Я вызываю дочернее окно"))
###
class Ui_MainWindow(object): # окно, которое вызывается кнопкой в главном окне
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(80, 80, 651, 341))
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "Я дочернее окно, или как там правильно"))
# код главный
import frst
import scnd
import sys
from PyQt5 import QtWidgets
class Main(QtWidgets.QMainWindow):
def __init__(self):
super(Main, self).__init__()
self.ui = frst.Ui_MainWindow()
self.ui.setupUi(self)
def call_btn(self):
self.ui.pushButton.clicked.connect(lambda: self.call_event())
def call_event(self):
pass
if __name__ == '__main__':
app = QtWidgets.QApplication([])
application = Main()
application.show()
sys.exit(app.exec_())
Заранее спасибо.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте, если что-то не понятно - спросите.
main.py
import sys
from PyQt5 import QtWidgets
# --> vvvvvvvvvvvvv <----
from frst import Ui_MainWindow as FrstWindow
from scnd import Ui_MainWindow as ScndWindow
# --> ^^^^^^^^^^^^^ <----
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
class SecondWindow(QtWidgets.QMainWindow, ScndWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
class Main(QtWidgets.QMainWindow, FrstWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.call_event)
self.secondWindow = SecondWindow() # !!! +++
def call_event(self):
self.secondWindow.show() # !!! +++
if __name__ == '__main__':
app = QtWidgets.QApplication([])
application = Main()
application.show()
sys.exit(app.exec_())
frst.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object): # главное окно
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(220, 190, 351, 141))
self.pushButton.setObjectName("pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "Я вызываю дочернее окно"))
scnd.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object): # окно, которое вызывается кнопкой в главном окне
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(80, 80, 651, 341))
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.label.setText(_translate("MainWindow", "Я дочернее окно, или как там правильно"))
