python - PyQT Fusion 样式删除了可检查组合框中的复选框
问题描述
我使用以下代码创建了一个可检查的 qcombobox。然后,我应用了融合风格让我的程序看起来更好。但是,这样做会导致我的代码中项目旁边的复选框不再可见。我该如何解决?
class WindowGUI(QMainWindow):
def __init__(self, gui):
super().__init__()
self.initUI(gui)
def initUI(self, gui):
self.teacherSelect = TeacherSelect()
self.setCentralWidget(self.teacherSelect)
class TeacherSelect(QComboBox):
def __init__(self, parent):
super().__init__(parent)
self.parent = parent
self.initModel()
self.addTeachers()
def initModel(self):
self.number = 1
self.selecteds = []
self.teacherDataWids = []
self.view().pressed.connect(self.select)
def addTeachers(self):
self.source = {"id1" : "a", "id2" : "b"}
self.number = 0
for teacherID in self.source.keys():
self.addItem(self.source[teacherID])
teacherItem = self.model().item(self.number)
teacherItem.setData(teacherID)
teacherItem.setCheckState(Qt.Unchecked)
self.number += 1
def select(self, index):
pass
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setStyle("fusion")
windowGUI = WindowGUI()
windowGUI.show()
sys.exit(app.exec_())
解决方案
你必须在视图中建立一个委托,我也花时间改进你的代码:
from PyQt5 import QtCore, QtWidgets
class WindowGUI(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__()
self.initUI()
def initUI(self):
self.teacherSelect = TeacherSelect()
self.setCentralWidget(self.teacherSelect)
class TeacherSelect(QtWidgets.QComboBox):
def __init__(self, parent=None):
super().__init__(parent)
self.initModel()
self.addTeachers()
# get parent with self.parent() or self.parentWidget()
def initModel(self):
self.number = 1
self.selecteds = []
self.teacherDataWids = []
self.view().pressed.connect(self.select)
delegate = QtWidgets.QStyledItemDelegate(self.view()) # <--
self.view().setItemDelegate(delegate) # <--
def addTeachers(self):
source = {"id1" : "a", "id2" : "b"}
for i, (k, v) in enumerate(source.items()):
self.addItem(v)
it = self.model().item(i)
it.setData(k)
it.setCheckable(True)
it.setCheckState(QtCore.Qt.Unchecked)
def select(self, index):
pass
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
combo = WindowGUI()
combo.resize(100, 40)
combo.show()
sys.exit(app.exec_())
推荐阅读
- javascript - 在 d3.json 中放一个链接
- neo4j - 如果 Cypher 查询中的属性为 Null,则跳过其他属性的关系创建
- python - 一个模型类可以与另一组模型类 django 有特定的关系吗?
- c# - C# xPath 不是有效的表达式
- .net-core - .NET Core 2.1 使用环境变量在 dotnet core 命令 CLI 中使用 git hash 进行构建
- node.js - 使用 nodejs 客户端插入 postgres 时出错
- jquery - Mysql 表列不是 null ,但列我需要在 codeingiter 中为 null
- sql - 如何使用超过 1500 万行的表聚合来调整查询?
- c# - 根据用户输入创建对象
- angular - 如何使我的 ngx-line-chart 响应式?