Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Дмитрий Ершов Ученик (86), открыт 1 день назад
Всем здравия желаю! Я новичок, делаю приложение на 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)
Подскажите пожалуйста как это можно по-другому реализовать, а если нет, то как исправить ошибку((
1 ответ
Анонимус Мудрец (16042) 1 день назад
Ошибка DeprecationWarning: sipPyTypeDict() is deprecated, the extension module should use sipPyTypeDictRef() instead указывает на устаревшую практику использования sipPyTypeDict() в вашем коде, который, вероятно, генерируется pyuic5. Это не критичная ошибка, но сигнализирует о необходимости обновления. Однако, сама архитектура решения на StackOverflow, которую вы привели, не является лучшим подходом для создания многостраничного приложения в PyQt5. Вместо переключения QWidget-ов, лучше использовать QStackedWidget или QTabWidget. Они предназначены специально для этой задачи и предоставляют более элегантный и maintainable способ управления несколькими страницами.

 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_())
Дмитрий ЕршовУченик (86) 1 день назад
Спасибо за ответ, проблема в том, что в этих виджетах присутствуют кнопки для самостоятельного переключения, а мне их не надо))
Похожие вопросы