前言✨
最近开发一个项目,我负责UI部分,其中一个需求是一个带标题的下拉选择列表。本来想使用QComboBox来进行选择,用placeHolder方法显示标题(标题不在列表选项中),可是却没有效果。经过查询,找到了实现这个功能的平替:QMenu。
正文📋
该方法的逻辑是在QPushButton组件上添加一个QMenu,然后通过addAction方法添加项目以及链接的函数,在该函数中得到sender的text,再将button显示的文字设置为text
参考来自
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| from PySide2 import QtWidgets import sys from functools import partial class MyFirstQtWin(QtWidgets.QDialog): def __init__(self): super(MyFirstQtWin,self).__init__() self.resize(250,200) self.setWindowTitle("MyFirstQtWin") self._ui()
def _ui(self): self.createWidgets() self.createLayouts() def createWidgets(self): self.button=QtWidgets.QPushButton("button1") self.menu=QtWidgets.QMenu() self.menu.addAction("aaa",self.set_button_text) self.menu.addAction("bbb",self.set_button_text) self.menu.addAction("ccc",self.set_button_text) self.button.setMenu(self.menu)
def createLayouts(self): self.layout_outside=QtWidgets.QHBoxLayout(self) self.HLayout=QtWidgets.QHBoxLayout() self.HLayout.addWidget(self.button) self.layout_outside.addLayout(self.HLayout)
def set_button_text(self): self.button.setText(self.sender().text())
if __name__=="__main__": app=QtWidgets.QApplication(sys.argv) win=MyFirstQtWin() win.show() app.exec_()
|