我知道Combobox小部件有.setEnabled(bool)方法。但除了使它不可用之外,这个方法还会使这个小部件变灰。我需要的是设置Combobox,使其显示为活动但仍然是只读的。有什么想法吗?
答案 0 :(得分:1)
执行此操作的一种方法是破坏适当的事件处理程序。这可以使用子类:
来完成class ComboBox(QtGui.QComboBox):
def __init__(self, parent):
QtGui.QComboBox.__init__(self, parent)
self.readonly = False
def mousePressEvent(self, event):
if not self.readonly:
QtGui.QComboBox.mousePressEvent(self, event)
def keyPressEvent(self, event):
if not self.readonly:
QtGui.QComboBox.keyPressEvent(self, event)
def wheelEvent(self, event):
if not self.readonly():
QtGui.QComboBox.wheelEvent(self, event)
或使用事件过滤器:
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.combo = QtGui.QComboBox(self)
self.combo.readonly = False
self.combo.installEventFilter(self)
...
def eventFilter(self, source, event):
if (source is self.combo and self.combo.readonly and (
event.type() == QtCore.QEvent.MouseButtonPress or
event.type() == QtCore.QEvent.KeyPress or
event.type() == QtCore.QEvent.Wheel)):
return True
return QtGui.QWidget.eventFilter(self, source, event)
就个人而言,我更愿意禁用组合框,或者重置其项目列表,因此只有一个选择。
答案 1 :(得分:0)
cb=QComboBox()
cb.lineEdit().setReadOnly(True)
或
LE=QLineEdit()
LE.setReadOnly(True)
self.comboBox.setLineEdit(LE)
QComboBox有一个方法 lineEdit 。只需传递它就可以访问QLineEdit方法
我希望这就是你要找的东西。
答案 2 :(得分:-1)
你的答案是你需要将setEditable设置为False。
self.comboBox.setEditable(False)
并且,您也可以通过不在模型
中设置可编辑标志来实现此目的def flags( self,index):
return QtCore.Qt.ItemIsEnabled |QtCore.Qt.ItemIsSelectable
这是无关紧要的,但你似乎只是通过查看PyQt类参考就可以解决很多问题,我们很乐意帮助你,但是提出可以轻松解决的问题是没有意义的,并且是一个浪费你宝贵的时间。
以下是参考的链接。 Reference Link