PyQt5 ComboBox-如何设置CurrentText的颜色而不影响下拉列表?

发布于 2021-01-29 16:39:07

以下代码段正确设置了“组合框”下拉列表中各个条目的颜色。然而,当选择并传送到CurrentText字段项目时, 所有
在下拉变化CurrentText的颜色的条目。如何在 影响下拉列表的 情况下 传输要显示为CurrentText的条目的颜色?

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class ComboDemo(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):

        def combo_changed():
            for color in ('red', 'green', 'blue'):
                if color == cb.currentText():
                    cb.setStyleSheet('color: {}'.format(color))

        grid = QGridLayout()
        cb = QComboBox()
        grid.addWidget(cb, 0, 0)
        model = cb.model()
        for color in ('red', 'green', 'blue'):
            entry = QStandardItem(color)
            entry.setForeground(QColor(color))
            model.appendRow(entry)

        cb.currentIndexChanged.connect(combo_changed)

        self.setLayout(grid)
        self.show()

app = QApplication(sys.argv)
c = ComboDemo()
app.exec_()
关注者
0
被浏览
47
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您必须使用QComboBox:editable

    import sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    
    class ComboDemo(QWidget):
    
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):
    
            def combo_changed():
                for color in ('red', 'green', 'blue'):
                    if color == cb.currentText():
                        cb.setStyleSheet("QComboBox:editable{{ color: {} }}".format(color))
    
            grid = QGridLayout()
            cb = QComboBox()
            grid.addWidget(cb, 0, 0)
            model = cb.model()
            for color in ('red', 'green', 'blue'):
                entry = QStandardItem(color)
                entry.setForeground(QColor(color))
                model.appendRow(entry)
    
            cb.currentIndexChanged.connect(combo_changed)
            self.setLayout(grid)
            self.show()
    
    app = QApplication(sys.argv)
    c = ComboDemo()
    app.exec_()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看