2024-04-25 09:02:07 发布
网友
我即将在qt designer中创建一个导航栏,但我不完全确定如何实现这一点。我的第一个想法是创建3个窗口,上面有三个按钮,分别是General、Delivery和Payment。然后,每当我点击其中一个按钮,我就会被引导到另一个窗口。这是在qt设计器中创建导航栏的“正确方法吗
我的另一个想法是创建1x窗口,但有三个不同的帧,这样它只会在单击按钮时更改一个帧,而不会更改整个窗口本身。不幸的是,我完全不知道该怎么做
布局示例如下:
一种可能的解决方案是使用修改过的QTabWidget并创建自定义页面:
from functools import cached_property import sys from PyQt5 import QtCore, QtGui, QtWidgets class Page(QtWidgets.QWidget): completeChanged = QtCore.pyqtSignal() def __init__(self, parent=None): super().__init__(parent) lay = QtWidgets.QVBoxLayout(self) lay.addWidget(self.container) lay.addWidget(self.button, alignment=QtCore.Qt.AlignCenter) self.button.clicked.connect(self.handle_clicked) @cached_property def container(self): return QtWidgets.QWidget() @cached_property def button(self): return QtWidgets.QPushButton("Save") def handle_clicked(self): if self.validate(): self.completeChanged.emit() def validate(self): # Override this method if you want to validate the entries, # if it returns True then it will go to the next page, # otherwise it will not move from the page return True class TabWizard(QtWidgets.QTabWidget): def __init__(self, parent=None): super().__init__(parent) self.tabBar().installEventFilter(self) def eventFilter(self, obj, event): if obj is self.tabBar() and event.type() == QtCore.QEvent.MouseButtonPress: return True return super().eventFilter(obj, event) def addPage(self, page, title): if not isinstance(page, Page): raise TypeError(f"{page} must be Page object") self.addTab(page, title) page.completeChanged.connect(self.nextPage) def nextPage(self): next_index = self.currentIndex() + 1 if next_index < self.count(): self.setCurrentIndex(next_index) class Page1(Page): def __init__(self, parent=None): super().__init__(parent) lay = QtWidgets.QFormLayout(self.container) lay.addRow("Foo1", QtWidgets.QLineEdit()) lay.addRow("Bar1", QtWidgets.QLineEdit()) class Page2(Page): def __init__(self, parent=None): super().__init__(parent) lay = QtWidgets.QFormLayout(self.container) lay.addRow("Foo2", QtWidgets.QLineEdit()) lay.addRow("Bar2", QtWidgets.QLineEdit()) class Widget(QtWidgets.QWidget): def __init__(self): super().__init__() tabwizard = TabWizard() lay = QtWidgets.QVBoxLayout(self) lay.addWidget(tabwizard) tabwizard.addPage(Page1(), "page1") tabwizard.addPage(Page2(), "page2") if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) w = Widget() w.show() sys.exit(app.exec_())
一种可能的解决方案是使用修改过的QTabWidget并创建自定义页面:
相关问题 更多 >
编程相关推荐