Top.Mail.Ru
Ответы

Переключение между "Страницами" в PyQt5

Всем здравия желаю! Я новичок, делаю приложение на PyQt5, из себя оно представляет инструмент для создания ресурспаков для Майнкрафта, но это не важно. Генерация там происходит поэтапно, и для этого я попытался использовать несколько "страниц", которые сменяют друг друга. Залез на StackOverflow, нашёл там вот это:
https://ru.stackoverflow.com/questions/1413810/
Я попытался также создать отдельный класс, но при запуске выдаётся ошибка:
DeprecationWarning: sipPyTypeDict() is deprecated, the extension module should use sipPyTypeDictRef() instead
class Name(QtWidgets.QWidget,Ui_Name)
Подскажите пожалуйста как это можно по-другому реализовать, а если нет, то как исправить ошибку((

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Просветленный
6мес

Ошибка DeprecationWarning: sipPyTypeDict() is deprecated, the extension module should use sipPyTypeDictRef() instead указывает на устаревшую практику использования sipPyTypeDict() в вашем коде, который, вероятно, генерируется pyuic5. Это не критичная ошибка, но сигнализирует о необходимости обновления. Однако, сама архитектура решения на StackOverflow, которую вы привели, не является лучшим подходом для создания многостраничного приложения в PyQt5. Вместо переключения QWidget-ов, лучше использовать QStackedWidget или QTabWidget. Они предназначены специально для этой задачи и предоставляют более элегантный и maintainable способ управления несколькими страницами.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
 import sys 
from PyQt5 import QtWidgets, uic  # Импортируем PyQt5 
 
class MainWindow(QtWidgets.QMainWindow): 
    def __init__(self): 
        super().__init__() 
        uic.loadUi('your_ui_file.ui', self) # Замените 'your_ui_file.ui' на имя вашего файла .ui 
 
        # Создаем QStackedWidget 
        self.stacked_widget = QtWidgets.QStackedWidget(self.centralwidget) # self.centralwidget - это центральный виджет вашего главного окна. Если структура другая, поправьте. 
        self.stacked_widget.setGeometry(10, 10, 800, 600) # Установите геометрию по вашему ui файлу. 
        self.setCentralWidget(self.stacked_widget) 
 
        # Создаем страницы (виджеты) 
        self.page1 = QtWidgets.QWidget() 
        self.page2 = QtWidgets.QWidget() 
        self.page3 = QtWidgets.QWidget() 
 
        # Загружаем UI для каждой страницы (если используется) 
        # uic.loadUi('page1.ui', self.page1) 
        # uic.loadUi('page2.ui', self.page2) 
        # uic.loadUi('page3.ui', self.page3) 
 
        # Добавляем страницы в QStackedWidget 
        self.stacked_widget.addWidget(self.page1) 
        self.stacked_widget.addWidget(self.page2) 
        self.stacked_widget.addWidget(self.page3) 
 
        # Добавляем кнопки навигации (пример) 
        self.button1 = QtWidgets.QPushButton("Page 1", self) 
        self.button1.clicked.connect(lambda: self.stacked_widget.setCurrentIndex(0)) 
        self.button2 = QtWidgets.QPushButton("Page 2", self) 
        self.button2.clicked.connect(lambda: self.stacked_widget.setCurrentIndex(1)) 
        self.button3 = QtWidgets.QPushButton("Page 3", self) 
        self.button3.clicked.connect(lambda: self.stacked_widget.setCurrentIndex(2)) 
 
        # Расположите кнопки на вашем главном окне (в ui файле или программно). 
 
        # self.button1.move(10, 10) #Пример 
        # self.button2.move(10, 40) 
        # self.button3.move(10, 70) 
        self.show() 
 
if __name__ == "__main__": 
    app = QtWidgets.QApplication(sys.argv) 
    window = MainWindow() 
    sys.exit(app.exec_()) 
Больше по теме