PyQt5-下拉列表框QComboBox

QComboBox功能概述

QComboBox是下拉列表框组件,它提供一个下拉列表供用户选择,也可以直接当作一个QLineEdit用于字符串输入。QComboBox除了显示可见下拉列表外,每个项(item,或称列表项)还可以关联一个QVariant类型的用户数据,用于存储一些在列表中不可见的数据。

image

窗口左侧“简单的ComboBox”分组框里是一个不带用户数据的简单的ComboBox,右侧“有用户数据的ComboBox”分组框里是每个项带有一个用户数据的ComboBox,每个项是一个城市名,关联的数据是城市的区号。

QComboBox主要的功能是提供一个下拉列表供选择输入。在可视化设计窗体时,在界面上放置一个QComboBox组件后,双击此组件会出现如图3-9所示的对话框,可以对QComboBox组件的下拉列表的项进行编辑。在此对话框中可以进行编辑、添加、删除、上移、下移等操作,可以设置项的图标。

image

窗体UI文件Widget.ui在UI Designer里可视化设计,界面上组件的布局和属性设置见源文件Widget.ui。

下面是我设计的ui界面

image

image

下面是myWidget.py文件整体代码:

import sys
from PyQt5.QtWidgets import  QWidget,QApplication
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtGui import QIcon

from ui_QtApp import Ui_Form
class QmyWidget(QWidget):
    def __init__(self,parent=None):
        super().__init__(parent) #调用父类构造函数
        self.ui=Ui_Form() #创建UI对象
        self.ui.setupUi(self) #构造UI

    ## ====由connectSlotsByName()自动与组件的信号关联的槽函数=====
    def on_pushButton_clicked(self): #初始化列表按钮
        #设置图标的操作
        icon=QIcon(":icon/img1.png")
        self.ui.comboBox.clear() #清除列表
        provinces=["山东","河北","河南","湖北","湖南","广东"] #列表数据
        for i in range(len(provinces)):
            self.ui.comboBox.addItem(icon,provinces[i])

    def on_pushButton_3_clicked(self): #有用户数据的comboBox2的初始化
        #设置图标的操作
        icon=QIcon(":icon/img2.png")
        self.ui.comboBox_2.clear() #清除列表
        cities={"北京":10,"上海":21,"天津":22,"徐州":516,"福州":591,"青岛":532} #字典数据
        for k in cities:
            self.ui.comboBox_2.addItem(icon,k,cities[k])

    def on_pushButton_2_clicked(self): #清除列表按钮
        self.ui.comboBox.clear() #清除列表

    ## =======自定义槽函数=======
    @pyqtSlot(bool) ##可编辑CheckBox
    def on_checkBox_clicked(self,checked):
        self.ui.comboBox.setEditable(checked)

    @pyqtSlot(str) ##简单的ComboBox的当前项变换
    def on_comboBox_currentIndexChanged(self,curText):
        self.ui.lineEdit.setText(curText)

    @pyqtSlot(str) ##当前项变化
    def on_comboBox_2_currentIndexChanged(self,curText):
        self.ui.lineEdit.setText(curText)
        zone=self.ui.comboBox_2.currentData() #读取关联数据
        if(zone!=None):#必须加此判断,因为有可能是None
            self.ui.lineEdit.setText(curText+": 区号=%d"%zone)

if __name__ == "__main__": ##用于当前窗体测试
    app=QApplication(sys.argv) #创建GUI应用程序
    form=QmyWidget() #创建窗体
    form.show()
    sys.exit(app.exec_())

应用程序主程序appMain.py文件如下:

## GUI应用程序主程序
import sys
from PyQt5.QtWidgets import  QApplication
from myWidget import  QmyWidget

app = QApplication(sys.argv) # 创建app,用QApplication类
myWidget = QmyWidget() #创建窗体
myWidget.show()
sys.exit(app.exec_())

所以整体效果图如下:

image

image

image

posted @ 2022-05-22 21:25  司砚章  阅读(5203)  评论(0编辑  收藏  举报