QComboBox的平替QMenu

Arya Lv3

前言✨

最近开发一个项目,我负责UI部分,其中一个需求是一个带标题的下拉选择列表。本来想使用QComboBox来进行选择,用placeHolder方法显示标题(标题不在列表选项中),可是却没有效果。经过查询,找到了实现这个功能的平替:QMenu。

正文📋

该方法的逻辑是在QPushButton组件上添加一个QMenu,然后通过addAction方法添加项目以及链接的函数,在该函数中得到sender的text,再将button显示的文字设置为text
参考来自

comboBox_subtitude

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_()
  • 标题: QComboBox的平替QMenu
  • 作者: Arya
  • 创建于 : 2023-12-18 18:00:00
  • 更新于 : 2024-03-12 19:26:08
  • 链接: https://aryagala0.github.io/2023/12/18/PyQt/QComboBox的平替QMenu/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论
此页目录
QComboBox的平替QMenu