[PyQT5]QComboBox下拉框给选项增加按钮

        常规的QComboBox的addItem函数只能添加图片和文字,但是其实带按钮的选项非常常见。由于我初学pyqt,但是查阅资料没有查到,只看到了一个优秀C++版本。本文最后实现的效果实际上是简陋的,可能需要经过很多调整。这个下拉框QCombobox的每一行都有一个独立的QPushButton。

        当然,addItem函数并没有传入QPushButton参数,因为我还没想好这些QPushButton具体执行哪些功能。为了编辑这个QPushButton,可以将它改为函数参数传入什么的,这里就用了一个空的QPushButton。

from PyQt5 import QtWidgets
class ComboBox_with_button(QComboBox):
    def __init__(self, parent = None, ** kwargs):
        super().__init__(parent = parent, ** kwargs)
        self.listview = QListWidget(parent)
        self.viewmodel = self.listview.model()
        #使用QListWidget作为View,用它的model作为model

        self.setView(self.listview)
        self.setModel(self.viewmodel)

        self.view().setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)

    def addItem(self, text):
        item_widget = QWidget()
        layout = QHBoxLayout(item_widget)
        layout.addStretch()
        layout.addWidget(QPushButton(self))
        #在此处对QPushButton进行操作

        layout.setContentsMargins(0, 0, 0, 0);

        item_list = self.listview
        item_wrap = QListWidgetItem(item_list)
        item_wrap.setText(text)
        item_list.setItemWidget(item_wrap, item_widget)

       如何评价这段代码呢?因为博主对qt的理解也很浅薄,所以只能用自己的理解稍加解释吧。重写QCombobox需要设置两个参数,listview和viewmodel,分别对应widget和model。widget好说,model一开始我没有找到它对应的类,后来发现了他居然有model()函数返回这个,试了试可以运行。ScrollBarAsNeeded就是下拉框不够长的时候,右边出现滑动条,这个是细枝末节。

        使用样例如下。我没有给出完整的可运行代码,你需要一个MainWindow窗口来嵌入它。但是我在一开始放了两张截图展示效果。

self.comboBox = ComboBox_with_button(MainWindow)
self.comboBox.setGeometry(QtCore.QRect(0, 800, 300, 30))
for i in range(100):
    self.comboBox.addItem("Label " + str(i + 1) + " (显示中)")

        为了实现这个功能我翻了好久的资料,最后参考了C++版本QComboBox下拉框给选项增加删除按钮。我所做的相当于只是改成了python。我发现Qt的python和C++版本的函数基本上是共有的,甚至名字都相差不多。但是可能自己完全照着C++改成python也会有困难吧?所以希望这篇文章能帮到你们。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要获取PyQt5QComboBox所有下拉框的值,可以使用以下的方法: 1. 创建一个QComboBox对象,并将所需的下拉框选项添加到它中。 ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QComboBox class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 300, 200) comboBox = QComboBox(self) comboBox.addItem("Option 1") comboBox.addItem("Option 2") comboBox.addItem("Option 3") comboBox.activated[str].connect(self.onActivated) self.show() def onActivated(self, text): print(text) if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 在上面的示例中,创建了一个QComboBox并将三个选项添加到其中。当选择其中一个选项时,会调用onActivated函数并传入选中的选项文本。在这个函数中,你可以打印所选选项的值或执行其他操作。 2. 使用currentIndex方法获得当前选中的索引,并通过itemText方法获取选项的文本: ```python selected_text = comboBox.itemText(comboBox.currentIndex()) print(selected_text) ``` 通过上述方法,你可以获取当前选中的下拉框选项的文本。 3. 要获取所有下拉框的值,可以使用count方法获取下拉框选项的数量,并通过for循环遍历每个选项,然后通过itemText方法获取每个选项的文本: ```python for i in range(comboBox.count()): print(comboBox.itemText(i)) ``` 上述代码将打印每个下拉框选项的文本。你可以根据需求进行进一步的处理。 ### 回答2: 使用PyQt5中的QComboBox类可以很方便地获取所有下拉框的值。下面是一个简单的示例代码: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QComboBox class MainWindow(QMainWindow): def __init__(self): super().__init__() self.comboBox1 = QComboBox(self) self.comboBox1.addItem("选项1") self.comboBox1.addItem("选项2") self.comboBox1.addItem("选项3") self.comboBox2 = QComboBox(self) self.comboBox2.addItem("选项A") self.comboBox2.addItem("选项B") self.comboBox2.addItem("选项C") self.comboBox3 = QComboBox(self) self.comboBox3.addItem("选项X") self.comboBox3.addItem("选项Y") self.comboBox3.addItem("选项Z") self.setCentralWidget(self.comboBox1) self.getAllValues() def getAllValues(self): values = [] # 添加comboBox1的值 for i in range(self.comboBox1.count()): values.append(self.comboBox1.itemText(i)) # 添加comboBox2的值 for i in range(self.comboBox2.count()): values.append(self.comboBox2.itemText(i)) # 添加comboBox3的值 for i in range(self.comboBox3.count()): values.append(self.comboBox3.itemText(i)) print(values) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 在这个例子中,我们创建了3个QComboBox下拉框,并添加了不同的选项。然后,通过调用getAllValues()方法,可以获取所有下拉框的值并打印出来。在该方法中,我们通过遍历每个下拉框的count()方法获取下拉框选项的数量,然后通过itemText()方法获取每个选项的文本值,并将其添加到一个列表中。 以上代码可以运行并输出下拉框的值,对应本示例即["选项1", "选项2", "选项3", "选项A", "选项B", "选项C", "选项X", "选项Y", "选项Z"]。请根据自己的实际情况修改代码对应下拉框选项的数量和内容。 ### 回答3: 要获取QComboBox中所有下拉框的值,可以使用PyQt5库中的`currentText()`和`count()`方法来实现。 1. 首先,创建一个QComboBox对象,并添加需要的下拉框值: ``` comboBox = QComboBox() comboBox.addItem("值1") comboBox.addItem("值2") comboBox.addItem("值3") ``` 2. 使用`count()`方法获取下拉框的总数: ``` count = comboBox.count() ``` 3. 使用循环和`currentText()`方法依次获取每个下拉框的值,并将它们存储在一个列表中: ``` values = [] for i in range(count): value = comboBox.itemText(i) values.append(value) ``` 4. 现在,`values`列表中包含了所有下拉框的值。 完整的代码如下: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QComboBox app = QApplication([]) window = QMainWindow() comboBox = QComboBox() comboBox.addItem("值1") comboBox.addItem("值2") comboBox.addItem("值3") count = comboBox.count() values = [] for i in range(count): value = comboBox.itemText(i) values.append(value) window.show() app.exec_() ``` 通过以上代码,你可以通过访问`values`列表获取到QComboBox中所有下拉框的值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值