0

I created a checkable qcombobox using the following code. Then, I applied the fusion style to make my program look better. However, doing so results in the checkboxes next to the items in my code to no longer be visible. How can I fix that?

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_())
eyllanesc
  • 235,170
  • 19
  • 170
  • 241
Osama Adel
  • 73
  • 1
  • 6

1 Answers1

1

You have to establish a delegate in the view, also I have taken the time to improve your code a bit:

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_())
eyllanesc
  • 235,170
  • 19
  • 170
  • 241