PyQt下拉框QComboBox点击下拉时即更新下拉数据

在 PyQt 中,QComboBox 控件本身并没有直接的事件或信号来指示下拉列表何时被打开(即用户点击了下拉箭头)。但是,你可以通过其他方式间接地实现这个功能,比如通过重写 QComboBox 的某些方法或者在用户与 QComboBox 交互时触发一些自定义的逻辑。

常见的方法是使用 QComboBox 的 showPopup 方法,这个方法在下拉列表被显示之前会被调用。然而,showPopup 方法是保护的(protected),所以不能直接连接一个信号到它。但可以通过继承 QComboBox 并重写 showPopup 方法来实现需求。

python 复制代码
from PyQt5.QtWidgets import  QComboBox 
from PyQt5.QtCore import pyqtSlot 
class CustomComboBox(QComboBox):  
	"""
	重写 QComboBox 
	"""
    def __init__(self, parent=None):  
        super().__init__(parent)  
  
    @pyqtSlot()  
    def showPopup(self):  
        # 在这里添加你的逻辑来更新下拉列表的内容  
        # 例如,从某个数据源获取新的数据项  
        new_data = ["New Item 1", "New Item 2", "New Item 3"]  
        self.clear()  # 清除现有的项  
        self.addItems(new_data)  # 添加新的项  
  
        # 调用原始的 showPopup 方法来显示下拉列表  
        super().showPopup()  


from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout  
import sys  
class ComboBoxExample(QWidget):
	"""
	正常使用改造后的ComboBox
	"""  
    def __init__(self):  
        super().__init__()  
  
        self.initUI()  
  
    def initUI(self):  
        layout = QVBoxLayout(self)  
  
        # 使用自定义的 QComboBox  
        self.comboBox = CustomComboBox(self)  
  
        # 初始时添加一些项目(这些项目会在下拉列表打开时被清除并替换)  
        self.comboBox.addItem("Initial Item 1")  
        self.comboBox.addItem("Initial Item 2")  
  
        layout.addWidget(self.comboBox)  
  
        self.setWindowTitle('Custom QComboBox Example')  
        self.setGeometry(300, 300, 300, 200)  
  
if __name__ == '__main__':  
    app = QApplication(sys.argv)  
    ex = ComboBoxExample()  
    ex.show()  
    sys.exit(app.exec_())
相关推荐
xuxie9938 分钟前
N11 ARM-irq
java·开发语言
wefly20171 小时前
从使用到原理,深度解析m3u8live.cn—— 基于 HLS.js 的 M3U8 在线播放器实现
java·开发语言·前端·javascript·ecmascript·php·m3u8
luanma1509802 小时前
PHP vs C++:编程语言终极对决
开发语言·c++·php
寂静or沉默2 小时前
2026最新Java岗位从P5-P7的成长面试进阶资源分享!
java·开发语言·面试
剑穗挂着新流苏3122 小时前
117_PyTorch 实战:利用训练好的模型进行单张图片验证
人工智能·python·深度学习
Lethehong2 小时前
Python Selenium全栈指南:从自动化入门到企业级实战
python·selenium·测试工具·自动化
kyriewen112 小时前
给浏览器画个圈:CSS contain 如何让页面从“卡成PPT”变“丝滑如德芙”
开发语言·前端·javascript·css·chrome·typescript·ecmascript
智算菩萨3 小时前
MP3音频编码原理深度解析与Python全参数调优实战:从心理声学模型到LAME编码器精细控制
android·python·音视频
娇娇yyyyyy3 小时前
QT编程(18): Qt QItemSelectionModel介绍
开发语言·qt
豆豆的java之旅3 小时前
软考中级软件设计师 数据结构详细知识点(含真题+练习题,可直接复习)
java·开发语言·数据结构