Как разделить код PyQt6 на несколько файлов?
Я пишу приложение на PyQt6 и мне нужно разделить код на несколько файлов.
Первый файл создает главное окно, в котором есть кнопка по нажатии, которой очищаются все виджеты и должны добавляться новые, уже из другого файла.
Я пытался импортировать в главный файл, делал разные функции, делал lambda
функции, наследовал классы, но ничего не помогло.
Вот код:
main.py
from PyQt6 import QtWidgets, QtGui, QtCore
from PyQt6.QtWidgets import QApplication, QWidget
import enter_or_register
import sys
class QuizApplication(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Quiz Application")
self.setGeometry(300, 50, 645, 500)
self.layout = QtWidgets.QGridLayout()
self.pixmap = QtGui.QPixmap("marathon_battle-photo.jpg")
self.background_label = QtWidgets.QLabel(self)
self.background_label.setObjectName("background_label")
self.background_label.setPixmap(self.pixmap)
self.background_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.background_label.adjustSize()
self.welcome_label = QtWidgets.QLabel(self)
self.welcome_label.setObjectName("welcome_label")
self.welcome_label.setText("Welcome to Marathon Battle!")
self.welcome_label.setWordWrap(False)
self.welcome_label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.start_button = QtWidgets.QPushButton(self)
self.start_button.setObjectName("start_button")
self.start_button.setText("Start Quiz")
self.start_button.clicked.connect(self.on_start_clicked)
# и мне нужно чтобы по нажатию этой кнопки появлялись виджеты из второго файла
self.start_button.adjustSize()
self.layout.addWidget(self.welcome_label)
self.layout.addWidget(self.background_label)
self.layout.addWidget(self.start_button)
self.layout.setSpacing(10)
self.setLayout(self.layout)
def on_start_clicked(self):
self.background_label.clear()
self.welcome_label.clear()
self.start_button.close()
StyleSheet = """
#centralwidget {
border-image: url(background.png) 0 0 0 0 stretch stretch;
}
#welcome_label {
font-size: 23px;
}
#start_button {
font-size: 20px;
color: #ADFF2F;
background-color: #008000;
}
#instructional_label {
font-size: 20px;
color: rgba(135, 155, 200, 226);
}
"""
def application_setup():
app = QApplication(sys.argv)
app.setStyleSheet(StyleSheet)
window = QuizApplication()
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
application_setup()
enter_or_register.py
from PyQt6 import QtCore, QtWidgets
from PyQt6.QtWidgets import QWidget
class EnterOrRegister(QWidget):
def __init__(self):
super().__init__()
self.select_enter_register = QtWidgets.QLabel(self)
self.select_enter_register.setObjectName("select_enter_register")
self.select_enter_register.setText("Enter or register")
self.select_enter_register.setWordWrap(False)
self.select_enter_register.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
self.select_enter_register.adjustSize()
Источник: Stack Overflow на русском