Прежде всего, в основе моего решения лежит продвижение виджета, для этого я буду структурировать проект следующим образом:
├── main.py
├── pages
│ ├── energypage.py
│ ├── fanpage.py
│ ├── homepage.py
│ └── statuspage.py
└── ui
├── energy.ui
├── fan.ui
├── home.ui
├── main.ui
└── status.ui
.ui страниц будет основан нашаблон Widget, но основной будет использовать шаблон MainWindow (MainWindow позволяет иметь панели инструментов, StatusBar, DockWidgets, menuBar и т. д., поэтому я выбираю его как основной).
Поскольку .ui не может быть продвинут сам по себесоздаст классы, которые вызывают дизайн и следуют аналогичной структуре, но вы можете добавить больше функциональных возможностей, например, в случае homepage.py:
import os
from PyQt4 import QtGui, uic
current_dir = os.path.dirname(os.path.abspath(__file__))
Form, Base = uic.loadUiType(os.path.join(current_dir, "../ui/home.ui"))
class HomeWidget(Base, Form):
def __init__(self, parent=None):
super(self.__class__, self).__init__(parent)
self.setupUi(self)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
w = HomeWidget()
w.show()
sys.exit(app.exec_())
main.ui имеет кнопки слева иQStackedWidget с правой стороны:
Каждая страница была добавлена путем выбораОпция вставки страницы-> после текущей страницы меню, которое открывается по щелчку правой кнопкой мыши на QStackedWidget
Тогда будет предложено использовать виджет, который находится в папке страниц:
Затем в основном вы связываете кнопки с соответствующими индексами:
main.py
import os
from PyQt4 import QtGui, uic
from functools import partial
current_dir = os.path.dirname(os.path.abspath(__file__))
Form, Base = uic.loadUiType(os.path.join(current_dir, "ui/main.ui"))
class MainWidget(Base, Form):
def __init__(self, parent=None):
super(self.__class__, self).__init__(parent)
self.setupUi(self)
buttons = (self.homebutton, self.statusbutton, self.fanbutton, self.energybutton)
for i, button in enumerate(buttons):
button.clicked.connect(partial(self.stackedWidget.setCurrentIndex, i))
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
app.setStyle("fusion")
w = MainWidget()
w.show()
sys.exit(app.exec_())
Полный пример здесь .