pyqt5 在QComboBox()中创建每个单独的button按钮,点击每个按钮跳转到不同的界面
时间: 2024-03-04 21:48:44 浏览: 73
pyqt5使用按钮进行界面的跳转方法
在 PyQt5 中,可以使用 QComboBox 的 setItemDelegate() 方法来自定义每个下拉列表项的外观和交互行为。可以创建一个自定义的委托类,继承自 QStyledItemDelegate,并在其 createEditor() 方法中创建一个 QPushButton 作为下拉列表项的编辑器。然后可以为每个按钮设置 clicked 信号的槽函数,以实现按钮的点击事件。在槽函数中,可以使用 QStackedWidget 切换到不同的界面。下面是一个简单的示例:
``` python
from PyQt5.QtWidgets import QComboBox, QStyledItemDelegate, QPushButton, QApplication, QWidget, QVBoxLayout, QLabel, QStackedWidget
from PyQt5.QtGui import QStandardItemModel, QStandardItem
import sys
class ButtonDelegate(QStyledItemDelegate):
def __init__(self, parent):
super().__init__(parent)
self.parent = parent
def createEditor(self, parent, option, index):
button = QPushButton(parent)
button.setText(index.data())
button.clicked.connect(lambda: self.parent.stacked_widget.setCurrentIndex(index.row()))
return button
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
self.combo_box = QComboBox()
self.stacked_widget = QStackedWidget()
model = QStandardItemModel()
for i in range(5):
item = QStandardItem(f"Page {i+1}")
model.appendRow(item)
page_widget = QWidget()
layout = QVBoxLayout(page_widget)
layout.addWidget(QLabel(f"This is page {i+1}"))
self.stacked_widget.addWidget(page_widget)
self.combo_box.setModel(model)
delegate = ButtonDelegate(self)
self.combo_box.setItemDelegate(delegate)
main_layout = QVBoxLayout(self)
main_layout.addWidget(self.combo_box)
main_layout.addWidget(self.stacked_widget)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
在这个示例中,我们创建了一个 MainWindow 类作为主窗口,其中包含一个 QComboBox 和一个 QStackedWidget。我们在 QComboBox 中创建了一个委托类 ButtonDelegate,它会创建一个 QPushButton 作为每个下拉列表项的编辑器,并为每个按钮设置 clicked 信号的槽函数,以切换到相应的页面。在 MainWindow 的构造函数中,我们创建了一个 QStandardItemModel 并将其附加到 QComboBox 上,然后将委托设置为 QComboBox 的委托。我们还为每个页面创建了一个 QWidget,并将它们添加到 QStackedWidget 中。最后,我们将 QComboBox 和 QStackedWidget 添加到 MainWindow 的布局中,并显示窗口。运行代码,会看到每个下拉列表项都被替换成了一个带有按钮标签的 QPushButton,点击每个按钮会切换到相应的页面。
阅读全文