PyQt:如何自定义组合框项显示

2024-05-12 21:09:30 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以先创建一个组合框项,然后设置其显示属性(例如项的背景色、图标、字体颜色、字体大小等),然后使用ComboBox的.add item()方法将其添加到组合框中?现在我只能用:

myCombobox = QtGui.QComboBox
for i in range(10):
    myCombobox.addItem(str(i))

不用说,这种方法留给定制单个组合框的项显示属性的空间很小。我想要的是这样的:

myCombobox = QtGui.QComboBox
for i in range(10):
    item = comboboxItem()
    item.setColor(allBlueAndShiny)
    font = QtGui.QFont()
    font.setPointSize(10)
    item.setFont(font)

    # Only after item was set with all display properties it is added:        
    myCombobox.addItem(str(i))

以后编辑

下面是QCombobox定制项目的一个工作示例。谢谢Ekhuroo!


from PyQt4 import QtGui, QtCore

def main():
    app = QtGui.QApplication(sys.argv)
    window = QtGui.QWidget()
    main_layout = QtGui.QVBoxLayout()
    # QComboBox
    combo = QtGui.QComboBox()
    model = combo.model()
    for row in range(10):
        item = QtGui.QStandardItem(str(row))
        item.setForeground(QtGui.QColor('red'))
        font = item.font()
        font.setPointSize(10)
        item.setFont(font)
        model.appendRow(item)
    main_layout.addWidget(combo) 

    ok_button = QtGui.QPushButton("OK")
    ok_button.clicked.connect(OK)      
    main_layout.addWidget(ok_button) 

    main_layout.addStretch(1)
    window.setLayout(main_layout)
    window.show()
    sys.exit(app.exec_())

def OK(self):
    print 'OK'

if __name__ == '__main__':
    main()

Tags: informodelmainrangeokwindowitem
1条回答
网友
1楼 · 发布于 2024-05-12 21:09:30

默认情况下,QComboBox使用QStandardItemModel,因此可以使用QStandardItem方法更改各种显示属性:

combo = QtGui.ComboBox()
model = combo.model()
for row in range(10):
    item = QtGui.QStandardItem(str(index))
    item.setForeground(QtGui.QColor('red'))
    font = item.font()
    font.setPointSize(10)
    item.setFont(font)
    model.appendRow(item)

PS

如果要重置其中一个item properties,请将其设置为None,如下所示:

    item = self.combo.model().item(row)
    item.setData(None, QtCore.Qt.ForegroundRole)

相关问题 更多 >