Открытие нового окна PyQt5 по нажатию кнопки
У меня я есть три файла. Два это интерфейс окон, а третий это главный файл, в котором я хочу сделать действия для всех кнопок.
main.py
from first_menu import *
from second_menu import *
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
FirstMenu = QtWidgets.QMainWindow()
ui = Ui_FirstMenu()
ui.setupUi(FirstMenu)
FirstMenu.show()
sys.exit(app.exec_())
first_menu.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_first_menu(object):
def setupUi(self, first_menu):
first_menu.setObjectName("first_menu")
first_menu.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(first_menu)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setObjectName("pushButton_2")
self.verticalLayout.addWidget(self.pushButton_2)
first_menu.setCentralWidget(self.centralwidget)
self.retranslateUi(first_menu)
QtCore.QMetaObject.connectSlotsByName(first_menu)
def retranslateUi(self, first_menu):
_translate = QtCore.QCoreApplication.translate
first_menu.setWindowTitle(_translate("first_menu", "MainWindow"))
self.pushButton.setText(_translate("first_menu", "PushButton"))
self.pushButton_2.setText(_translate("first_menu", "PushButton"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
first_menu = QtWidgets.QMainWindow()
ui = Ui_first_menu()
ui.setupUi(first_menu)
first_menu.show()
sys.exit(app.exec_())
second_menu.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_second_menu(object):
def setupUi(self, second_menu):
second_menu.setObjectName("second_menu")
second_menu.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(second_menu)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setObjectName("label_2")
self.verticalLayout.addWidget(self.label_2)
second_menu.setCentralWidget(self.centralwidget)
self.retranslateUi(second_menu)
QtCore.QMetaObject.connectSlotsByName(second_menu)
def retranslateUi(self, second_menu):
_translate = QtCore.QCoreApplication.translate
second_menu.setWindowTitle(_translate("second_menu", "MainWindow"))
self.label.setText(_translate("second_menu", "TextLabel"))
self.label_2.setText(_translate("second_menu", "TextLabel"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
second_menu = QtWidgets.QMainWindow()
ui = Ui_second_menu()
ui.setupUi(second_menu)
second_menu.show()
sys.exit(app.exec_())
Вопрос: как мне сделать так чтобы в 3 файле хранился код функционала кнопок?
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Я не уверен, что правильно понимаю то, что вы хотите сделать. Возможный вариант задуманного вами может выглядеть так:
q1418513_main.py
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from q1418513_first_menu import Ui_first_menu
from q1418513_second_menu import Ui_second_menu
class SecondWindow(QtWidgets.QMainWindow, Ui_second_menu):
def __init__(self):
super(SecondWindow, self).__init__()
self.setupUi(self)
self.resize(300, 300)
class MainWindow(QtWidgets.QMainWindow, Ui_first_menu):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.pushButton.setText('Открыть второе окно.')
self.pushButton.setCheckable(True)
self.pushButton.clicked.connect(self.go_second_menu)
self.secondWindow = SecondWindow()
def go_second_menu(self, state):
if state:
self.secondWindow.show()
self.pushButton.setText('Закрыть второе окно.')
else:
self.secondWindow.hide()
self.pushButton.setText('Открыть второе окно.')
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
q1418513_first_menu.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_first_menu(object):
def setupUi(self, first_menu):
first_menu.setObjectName("first_menu")
first_menu.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(first_menu)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setObjectName("pushButton_2")
self.verticalLayout.addWidget(self.pushButton_2)
first_menu.setCentralWidget(self.centralwidget)
self.retranslateUi(first_menu)
QtCore.QMetaObject.connectSlotsByName(first_menu)
def retranslateUi(self, first_menu):
_translate = QtCore.QCoreApplication.translate
first_menu.setWindowTitle(_translate("first_menu", "MainWindow"))
self.pushButton.setText(_translate("first_menu", "PushButton"))
self.pushButton_2.setText(_translate("first_menu", "PushButton"))
q1418513_second_menu.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_second_menu(object):
def setupUi(self, second_menu):
second_menu.setObjectName("second_menu")
second_menu.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(second_menu)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setObjectName("label_2")
self.verticalLayout.addWidget(self.label_2)
second_menu.setCentralWidget(self.centralwidget)
self.retranslateUi(second_menu)
QtCore.QMetaObject.connectSlotsByName(second_menu)
def retranslateUi(self, second_menu):
_translate = QtCore.QCoreApplication.translate
second_menu.setWindowTitle(_translate("second_menu", "MainWindow"))
self.label.setText(_translate("second_menu", "TextLabel"))
self.label_2.setText(_translate("second_menu", "TextLabel"))

