python pyqt5 QComboBox模糊查询功能

下拉列表控件 QComboBox

1、如何将列表添加到QComboBox控件中

2、如何获取选中的列表项

3.扩展基本的ComboBox插件,增加模糊搜索功能,过滤出正确的Items

'''
下拉列表控件 QComboBox
1、如何将列表添加到QComboBox控件中
2、如何获取选中的列表项
3.扩展基本的ComboBox插件,增加模糊搜索功能,过滤出正确的Items
'''
import sys

from PyQt5.QtCore import QSortFilterProxyModel, Qt
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QComboBox, QCompleter


# 扩展ComboBox插件 增加Items模糊搜索功能
class ComboBox(QComboBox):
    def __init__(self, parent=None):
        super(ComboBox, self).__init__(parent)

        self.setFocusPolicy(Qt.StrongFocus)
        self.setEditable(True)

        # add a filter model to filter matching items
        self.pFilterModel = QSortFilterProxyModel(self)
        self.pFilterModel.setFilterCaseSensitivity(Qt.CaseInsensitive)
        self.pFilterModel.setSourceModel(self.model())

        # add a completer, which uses the filter model
        self.completer = QCompleter(self.pFilterModel, self)
        # always show all (filtered) completions
        self.completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion)
        self.setCompleter(self.completer)

        # connect signals
        self.lineEdit().textEdited.connect(self.pFilterModel.setFilterFixedString)
        self.completer.activated.connect(self.on_completer_activated)

    # on selection of an item from the completer, select the corresponding item from combobox
    def on_completer_activated(self, text):
        if text:
            index = self.findText(text)
            self.setCurrentIndex(index)
            self.activated[str].emit(self.itemText(index))

    # on model change, update the models of the filter and completer as well
    def setModel(self, model):
        super(ComboBox, self).setModel(model)
        self.pFilterModel.setSourceModel(model)
        self.completer.setModel(self.pFilterModel)

    # on model column change, update the model column of the filter and completer as well
    def setModelColumn(self, column):
        self.completer.setCompletionColumn(column)
        self.pFilterModel.setFilterKeyColumn(column)
        super(ComboBox, self).setModelColumn(column)


class QComboBoxDemo(QWidget):
    def __init__(self):
        super(QComboBoxDemo, self).__init__()
        self.initUI()

    def initUI(self):
        # 设置窗体的标题
        self.setWindowTitle("下拉列表空间的演示")
        # 调整窗体大小
        self.resize(300, 100)
        # 使用垂直布局
        layout = QVBoxLayout()
        # 创建一个标签控件
        self.label = QLabel('请选编程的语言')
        # 创建下拉列表控件
        self.cb = ComboBox()
        # 添加可选内容
        self.cb.addItem('C')
        self.cb.addItem('C++')
        self.cb.addItem('Python')
        # 以列表形式添加内容
        self.cb.addItems(['Java', 'C#', 'Ruby'])
        self.cb.addItems(['汉语', '华语', '中文', '日本语', '韩语', '英文'])

        self.cb.currentIndexChanged.connect(self.selectionChange)

        layout.addWidget(self.label)
        layout.addWidget(self.cb)

        self.setLayout(layout)

    def selectionChange(self, i):
        self.label.setText(self.cb.currentText())
        self.label.adjustSize()

        for count in range(self.cb.count()):
            print('选项' + str(count) + '=' + self.cb.itemText(count))

        print('当前索引', i, '选项被改变', self.cb.currentText())


if __name__ == '__main__':
    # 通过类创建一个应用
    app = QApplication(sys.argv)
    # 创建一个窗口
    w = QComboBoxDemo()
    # 这只窗口大小
    # w.resize(600,400)
    # 给窗口一个定位
    # w.move(200,100)
    # 设置窗口的标题
    # w.setWindowTitle('引入 QTDesigner 设计的 UI')
    # 实例化UI类
    # ui = mwUI.mwUI()
    # 初始化UI
    # ui.setupUi(w)

    # 让窗口显示
    w.show()
    sys.exit(app.exec_())

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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中所有下拉框的值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值