大家好,本次分享PyQt5选择列表类控件。选择列表类控件主要以列表的形式为用户提供可选择的选项。主要包括ComboBox、FontComboBox和ListWidget等。
一、ComboBox:下拉组合框
主要用于在下拉组合框中显示数据,用户从中选择项。
QComboBox类常用方法及说明
方法 | 说明 |
addItem() | 添加一个下拉列表项 |
addItems() | 从列表中添加下拉选项 |
currentText() | 获取选中项文本 |
currentIndex() | 获取选中项文本 |
itemText(index) | 获取索引为index的项的文本 |
setItemText(index,text) | 设置索引为index的项的文本 |
count() | 获取所有选项的数量 |
clear() | 删除所有选项 |
常用信号
信号 | 含义 |
Activated | 当用户选中一个下拉选项时发射该信号 |
currentIndexChanged | 当下拉选项的索引发生改变时发射该信号 |
highlighted | 当选中一个已经选中的下拉选项时,发射该信号 |
ComBox下拉列表使用示例
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class ComboxDemo(QWidget):
def __init__(self, parent=None):
super(ComboxDemo, self).__init__(parent)
self.setWindowTitle("下拉列表框例子")
self.resize(300, 90)
layout = QVBoxLayout()
self.lbl = QLabel("")
self.comBox = QComboBox()
self.comBox.addItem("Python")
self.comBox.addItem("C++")
self.comBox.addItems(["Java", "C#", "Php"])
self.comBox.currentIndexChanged.connect(self.selectinfo)#下拉列表中选项发生改变时发射currentIndexChanged信号,连接槽函数selectinfo()
layout.addWidget(self.comBox)
layout.addWidget(self.lbl)
self.setLayout(layout)
def selectinfo(self,i):
self.lbl.setText("Current index:{0}\n您选择的语言是:{1}".format(i,self.comBox.currentText()))
self.lbl.adjustSize()
if __name__ == '__main__':
app = QApplication(sys.argv)
comboxDemo = ComboxDemo()
comboxDemo.show()
sys.exit(app.exec_())
二、FontComboBox:字体组合框
主要用于在下拉组合框中显示并选择字体。FontComboBox控件与ComboBox控件类似,提供了一个setFontFilters()方法,用于设置可以选择的字体。
QFontComboBox.AllFonts:所有字体
QFontComboBox.ScalableFonts:可以自动伸缩的字体
QFontComboBox.NonScalableFonts:不自动伸缩的字体
QFontComboBox.MonospacedFonts:等宽字体
QFontComboBox.ProportionalFonts:比例字体
FontComboBox字体组合框使用示例
import sys
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtGui, QtWidgets
class FontComboBoxDemo(QWidget):
def __init__(self, parent=None):
super(FontComboBoxDemo, self).__init__(parent)
self.setWindowTitle("字体组合框例子")
self.resize(300, 90)
#布局
layout = QVBoxLayout()
self.lbl = QLabel("Python数据分析实例")
self.fontComboBox = QFontComboBox()
#设置组合框中显示所有字体
self.fontComboBox.setFontFilters(QtWidgets.QFontComboBox.AllFonts)
#当选择字体发生改变时,发射currentIndexChanged信号,调用槽函数setfont()
self.fontComboBox.currentIndexChanged.connect(self.setfont)
#添加控件到窗口
layout.addWidget(self.fontComboBox)
layout.addWidget(self.lbl)
self.setLayout(layout)
#自定义槽函数,将选择的字体设置为Lable标签的字体
def setfont(self):
self.lbl.setFont(QtGui.QFont(self.fontComboBox.currentText()))
self.lbl.adjustSize()
if __name__ == '__main__':
app = QApplication(sys.argv)
FontCbDemo = FontComboBoxDemo()
FontCbDemo.show()
sys.exit(app.exec_())
三、ListWidget:列表
QListWidget类是一个基于条目的接口,用于从列表中添加或删除条目。其内置了一个数据存储模型QListWidgetItem,使用addItem()或addItems()方法可添加列表项。
QListWidget类常用方法及说明
方法 | 说明 |
addItem() | 向列表中添加项 |
addItems() | 一次向列表中添加多项 |
insertItem() | 指定索引处插入项 |
setCurrentItem() | 设置当前选择项 |
item.setToolTip() | 设置提示内容 |
item.isSelected() | 判断项是否选中 |
item.text() | 获取项文本 |
sortItems() | 按升序重新排列条目 |
clear() | 删除所有列表项 |
setSelectionMode() | 设置列表的选择模式: 1、QAbstractItemView.NoSelection,不选择 2、QAbstractItemView.SingleSelection,单选 3、QAbstractItemView.MultiSelection,多选 4、QAbstractItemView.ExtendedSelection,正常单选,按下Ctrl或shift键后,可多选 5、QAbstractItemView.ContigousSelection |
setSelectionBehavior() | 设置选择项的方式: 1、QAbstractItemView.SelectItems,选中当前项 2、QAbstractItemView.SelectRows,选中整行 3、QAbstractItemView.SelectColumns,选中整列 |
setViewMode() | 设置显示模式: 1、QListView.ListMode,列表形式显示 2、QListView.IconMode,图表形式显示 |
setWordWrap() | 设置是否自动换行,True自动换行,False不自动换行 |
LIstWidget控件常用信号由两个:currentItemChanged(在列表中选择项发射改变时发射)和itemClicked(单击列表中的项时发射)。
ListWidget列表使用示例
import sys
from PyQt5.QtWidgets import *
from PyQt5 import QtWidgets
class ListWidgetDemo(QWidget):
def __init__(self, parent=None):
super(ListWidgetDemo, self).__init__(parent)
self.setWindowTitle("列表框例子")
self.resize(300,150)
#布局
layout = QVBoxLayout()
self.lbl = QLabel("Python数据分析实例")
self.listWidget = QListWidget()
self.listWidget.resize(300, 120)
# self.listWidget.addItem("Item 1");
# self.listWidget.addItem("Item 2");
# self.listWidget.addItem("Item 3");
# self.listWidget.addItem("Item 4");
from collections import OrderedDict
# 定义有序字典,作为List列表的数据源
dict = OrderedDict({'第1名': 'Item 1', '第2名': 'Item 2',
'第3名': 'Item 3', '第4名': 'Item 4',
'第5名': 'Item 5', '第6名': 'Item 6',
'第7名': 'Item 7', '第8名': 'Item 8'})
for key, value in dict.items(): # 遍历字典,并分别获取到键值
self.listWidget.addItem("{0}:{1}".format(key,value))
#或
# self.item = QtWidgets.QListWidgetItem(self.listWidget) # 创建列表项
# self.item.setText(key + ':' + value) # 设置项文本
self.listWidget.setToolTip(value) # 设置提示文字
# 设置列表中可以多选
self.listWidget.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
# 设置选中方式为整行选中
self.listWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
# 设置以列表形式显示数据
self.listWidget.setViewMode(QtWidgets.QListView.ListMode)
self.listWidget.setWordWrap(True) # 设置自动换行
self.listWidget.itemClicked.connect(self.clicked)
#添加控件到窗口
layout.addWidget(self.listWidget)
layout.addWidget(self.lbl)
self.setLayout(layout)
# 自定义槽函数,获取列表选中项的值
def clicked(self, item):
if item.isSelected(): # 判断项是否选中
QMessageBox.information(self, "提示", "你选择了: " + item.text(),QMessageBox.Ok)
if __name__ == '__main__':
app = QApplication(sys.argv)
ListDemo = ListWidgetDemo()
ListDemo.show()
sys.exit(app.exec_())