gpt4 book ai didi

python - QComboBox 添加粗体父项

转载 作者:太空宇宙 更新时间:2023-11-04 11:14:06 24 4
gpt4 key购买 nike

我想将某种父项目添加到 pyqt5 组合框,它允许对下面的项目进行分组。如果可能的话, parent 应该是不可选择的和大胆的, children 有点缩进。

到目前为止我得到了什么:我把它们加粗了,但我不知道不可选择的选项。我可以添加 .setEnabled(False) 但这会使它们变灰。也许还有比在子项目前面简单地添加空白更好的方法?

from PyQt5.QtWidgets import QWidget, QComboBox, QApplication
import PyQt5.QtGui
import sys


class Example(QWidget):

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


def initUI(self):

combo = QComboBox(self)

combo.addItem("option_1")
combo.addItem("group_1")
combo.addItem(" option_2")
combo.addItem(" option_3")
combo.addItem("group_2")
combo.addItem(" option_4")
combo.addItem(" option_5")


font = PyQt5.QtGui.QFont()
font.setBold(True)

item = combo.model().item(1, 0) # group_1 bold
item.setFont(font)

item = combo.model().item(4, 0) # group_2 bold
item.setFont(font)


combo.currentTextChanged.connect(lambda : print(combo.currentText()) )

self.setGeometry(100, 100, 300, 100)
self.show()


if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

当前代码的样子:

最佳答案

您可以创建一个自定义模型来实现组的逻辑。要禁用选择,您必须使用标志。使用角色旁边的委托(delegate)建立缩进。您不应使用 QComboBox 的 addItem 方法,而应使用模型。

from PyQt5 import QtCore, QtGui, QtWidgets


GroupRole = QtCore.Qt.UserRole


class GroupDelegate(QtWidgets.QStyledItemDelegate):
def initStyleOption(self, option, index):
super(GroupDelegate, self).initStyleOption(option, index)
if not index.data(GroupRole):
option.text = " " + option.text


class GroupItem(QtGui.QStandardItem):
def __init__(self, text):
super(GroupItem, self).__init__(text)
self.setData(True, GroupRole)
self._number_of_childrens = 0
font = self.font()
font.setBold(True)
self.setFont(font)
self.setFlags(self.flags() & ~QtCore.Qt.ItemIsSelectable)

def addChild(self, text):
it = QtGui.QStandardItem(text)
it.setData(False, GroupRole)
self._number_of_childrens += 1
self.model().insertRow(self.row() + self._number_of_childrens, it)
return it


class GroupComboBox(QtWidgets.QComboBox):
def __init__(self, parent=None):
super(GroupComboBox, self).__init__(parent)
self.setModel(QtGui.QStandardItemModel(self))
delegate = GroupDelegate(self)
self.setItemDelegate(delegate)

def addGroup(self, text):
it = GroupItem(text)
self.model().appendRow(it)
return it

def addChild(self, text):
it = QtGui.QStandardItem(text)
it.setData(True, GroupRole)
self.model().appendRow(it)


class Example(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
combo = GroupComboBox()

combo.addChild("option_1")

group1 = combo.addGroup("group_1")
group1.addChild("option_2")
group1.addChild("option_3")

group2 = combo.addGroup("group_2")
group2.addChild("option_4")
group2.addChild("option_5")

lay = QtWidgets.QVBoxLayout(self)
lay.addWidget(combo)

self.resize(160, 60)


if __name__ == "__main__":
import sys

app = QtWidgets.QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())

关于python - QComboBox 添加粗体父项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57437204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com