以下代码段正确设置了“组合框”下拉列表中各个条目的颜色。但是,当选择一个项目并将其转移到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_()
最佳答案
您必须使用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_()
关于python - PyQt5 ComboBox-如何设置CurrentText的颜色而不影响下拉列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50711763/