#python #pyqt5 #pyside #qt-designer #qstackedwidget
#python #pyqt5 #pyside #qt-designer #qstackedwidget
Вопрос:
Я использую PyQt5 и Qt-Designer для разработки приложения.
Как мне создать экземпляр класса для каждой страницы в QStackedWidget. Я могу сделать это в одном классе, все виджеты принадлежат одному и тому же QMainWindow. Но проблема в том, что файл станет слишком длинным и непрактичным. Как мне назначить класс для каждой страницы. Например, класс I
обрабатывает все виджеты на странице I
, а класс II
обрабатывает все виджеты на странице II
; в файле QMainWindow я могу просто назначить объект, который представляет каждую страницу.
Как я могу это сделать?
Комментарии:
1. Ваш вопрос неясен. Вы не «назначаете класс» странице, по крайней мере, вы добавляете экземпляр класса (как правило, QWidget) для каждой страницы. Вы хотите использовать более «модульный» подход, используя отдельные классы (и, возможно, отдельные файлы), которые затем будут использоваться для страниц? Кроме того, «проблема в том, что файл станет слишком длинным и непрактичным»: вы же не пытаетесь изменить файл, созданный pyuic, не так ли?
2. @musicamante Я не изменяю файлы pyuic, это не очень хороший подход. «Вы хотите иметь более «модульный» подход, используя отдельные классы (и, возможно, отдельные файлы), которые затем будут использоваться для страниц?» Да, это именно то, что я хочу сделать. Логический файл главного окна становится больше, его раздражает чтение и отладка. Что я хочу сделать, так это: поместить каждую страницу StackedWidget в файл, чтобы я мог легко читать и изменять. Назначить — это то, как я бы описал экземпляр, когда мой словарный запас ограничен.
Ответ №1:
Просто создайте несколько модулей:
widget1.py
from PyQt5.QtWidgets import QWidget
class Widget1(QWidget):
def __init__(self, *args, **kwargs):
QWidget.__init__(self, *args, **kwargs)
widget2.py
from PyQt5.QtWidgets import QWidget
class Widget2(QWidget):
def __init__(self, *args, **kwargs):
QWidget.__init__(self, *args, **kwargs)
main.py
from widget1 import Widget1
from widget2 import Widget2
from PyQt5.QtWidgets import QMainWindow, QApplication
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setTitle("Stackked widget demo")
self.stacked = QStackedWidget(self)
self.setCentralWidget(self.stacked)
self.widget1 = Widget1()
self.stacked.addWidget(self.widget1)
self.widget2 = Widget2()
self.stacked.addWidget(self.widget2)
if __name__ == "__main__":
app = QApplication([])
mainwin = MainWindow()
mainwin.show()
app.exec_()