QComboBox 的常规使用方法,在这个使用模板里,基本都有了。
QComboBox小部件是一个组合的按钮和弹出列表。
QComboBox提供了一种向用户呈现选项列表的方式,其占用最小量的屏幕空间。
组合框是一个显示当前项目的选择小部件,可以弹出可选项目列表。组合框可以是可编辑的,允许用户修改列表中的每个项目。
组合框可以包含图像以及字符串; 当然insertItem()和setItemText()函数需要适当重载。对于可编辑组合框,提供了函数clearEditText(),以清除显示的字符串而不更改组合框的内容。
如果组合框的当前项目发生更改,则会发出两个信号currentIndexChanged()和activated()。无论以编程方式或通过用户交互完成更改,currentIndexChanged()总是被发射,而只有当更改是由用户交互引起时才activated() 。highlighted()信号在用户突出显示组合框弹出列表中的项目时发出。所有三个信号都有两个版本,一个带有str参数,另一个带有int参数。如果用户选择或突出显示一个图像,则只会发出int信号。每当可编辑组合框的文本发生改变时,editTextChanged()信号就会发出。
当用户在可编辑的组合框中输入一个新的字符串时,该小部件可能会插入它,也可能不会插入它,并且可以将它插入到多个位置。默认策略是InsertAtBottom,但您可以使用setInsertPolicy()更改它。
可以使用QValidator将输入约束为可编辑的组合框;请参阅setValidator()。默认情况下,接受任何输入。
例如,可以使用插入函数insertItem()和insertItems()来填充组合框。可以使用setItemText()更改项目。一个项目可以使用removeItem()来移除,所有项目都可以使用clear()来移除。当前项目的文本由currentText()返回,项目的文本编号使用text()返回。当前项目可以使用setCurrentIndex()来设置。 count()返回组合框中的项目数;可以用setMaxCount()设置项目的最大数量。您可以允许使用setEditable()进行编辑。对于可编辑组合框,您可以使用setCompleter()设置自动完成,并且用户是否可以添加重复项由setDuplicatesEnabled()进行设置。
QComboBox为其弹出列表使用模型/视图框架并存储其项目。默认情况下,QStandardItemModel存储项目,QListView子类显示弹出列表。您可以直接访问模型和视图(使用model()和view()),但QComboBox还提供了设置和获取项目数据的函数(例如,setItemData()和itemText())。您还可以设置新的模型和视图(使用setModel()和setView())。对于组合框标签中的文本和图标,将使用具有Qt.DisplayRole和Qt.DecorationRole的模型中的数据。请注意,您不能通过使用setSelectionMode()来更改view()的SelectionMode。
类归属
PyQt5->QtWidgets->QComboBox
继承关系
PyQt5->QObject and QPaintDevice->QWidget->QFontComboBox->QComboBox
熟悉一下代码,直接就可以用了。
【如下代码,完全复制,直接运行,即可使用】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
################################################
items_list = [ "C" , "C++" , "Java" , "Python" , "JavaScript" , "C#" , "Swift" , "go" , "Ruby" , "Lua" , "PHP" ]
datas_list = [ 1972 , 1983 , 1995 , 1991 , 1992 , 2000 , 2014 , 2009 , 1995 , 1993 , 1995 ]
################################################
class Widget(QWidget):
def __init__( self , * args, * * kwargs):
super (Widget, self ).__init__( * args, * * kwargs)
layout = QVBoxLayout( self )
self .combobox1 = QComboBox( self , minimumWidth = 200 )
self .combobox2 = QComboBox( self , minimumWidth = 200 )
self .combobox3 = QComboBox( self , minimumWidth = 200 )
self .combobox4 = QComboBox( self , minimumWidth = 200 )
layout.addWidget(QLabel( "增加单项,不带数据" , self ))
layout.addWidget( self .combobox1)
layout.addItem(QSpacerItem( 20 , 20 , QSizePolicy.Expanding, QSizePolicy.Minimum))
layout.addWidget(QLabel( "增加单项,附带数据" , self ))
layout.addWidget( self .combobox2)
layout.addItem(QSpacerItem( 20 , 20 , QSizePolicy.Expanding, QSizePolicy.Minimum))
layout.addWidget(QLabel( "增加多项,不带数据" , self ))
layout.addWidget( self .combobox3)
layout.addItem(QSpacerItem( 20 , 20 , QSizePolicy.Expanding, QSizePolicy.Minimum))
layout.addWidget(QLabel( "设置模型,不带数据" , self ))
layout.addWidget( self .combobox4)
#初始化combobox
self .init_combobox1()
self .init_combobox2()
self .init_combobox3()
self .init_combobox4()
#增加选中事件
self .combobox1.activated.connect( self .on_combobox1_Activate)
self .combobox2.activated.connect( self .on_combobox2_Activate)
self .combobox3.activated.connect( self .on_combobox3_Activate)
self .combobox4.activated.connect( self .on_combobox4_Activate)
####### addItem() 增加单项元素,不带数据 #########
def init_combobox1( self ):
for i in range ( len (items_list)):
self .combobox1.addItem(items_list[i])
self .combobox1.setCurrentIndex( - 1 )
def on_combobox1_Activate( self , index):
print ( self .combobox1.count())
print ( self .combobox1.currentIndex())
print ( self .combobox1.currentText())
print ( self .combobox1.currentData())
print ( self .combobox1.itemData( self .combobox1.currentIndex()))
print ( self .combobox1.itemText( self .combobox1.currentIndex()))
print ( self .combobox1.itemText(index))
####### addItem() 增加单项元素,附带数据 #########
def init_combobox2( self ):
for i in range ( len (items_list)):
self .combobox2.addItem(items_list[i],datas_list[i])
self .combobox2.setCurrentIndex( - 1 )
def on_combobox2_Activate( self , index):
print ( self .combobox2.count())
print ( self .combobox2.currentIndex())
print ( self .combobox2.currentText())
print ( self .combobox2.currentData())
print ( self .combobox2.itemData( self .combobox2.currentIndex()))
print ( self .combobox2.itemText( self .combobox2.currentIndex()))
print ( self .combobox2.itemText(index))
####### addItems() 增加多项元素,不带数据 #########
def init_combobox3( self ):
self .combobox3.addItems(items_list)
self .combobox3.setCurrentIndex( - 1 )
def on_combobox3_Activate( self , index):
print ( self .combobox3.count())
print ( self .combobox3.currentIndex())
print ( self .combobox3.currentText())
print ( self .combobox3.currentData())
print ( self .combobox3.itemData( self .combobox3.currentIndex()))
print ( self .combobox3.itemText( self .combobox3.currentIndex()))
print ( self .combobox3.itemText(index))
####### setModel() 设置数据模型,不带数据 #########
def init_combobox4( self ):
self .tablemodel = QStringListModel(items_list)
self .combobox4.setModel( self .tablemodel)
self .combobox4.setCurrentIndex( - 1 )
def on_combobox4_Activate( self , index):
print ( self .combobox4.count())
print ( self .combobox4.currentIndex())
print ( self .combobox4.currentText())
print ( self .combobox4.currentData())
print ( self .combobox4.itemData( self .combobox4.currentIndex()))
print ( self .combobox4.itemText( self .combobox4.currentIndex()))
print ( self .combobox4.itemText(index))
if __name__ = = "__main__" :
app = QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.jianshu.com/p/c0a3af18e12a