Стиль PyQT Fusion снимает флажки в выпадающем списке - PullRequest
0 голосов
/ 27 октября 2018

Я создал проверяемый 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_())

1 Ответ

0 голосов
/ 27 октября 2018

Вы должны установить делегата в представлении, также я потратил время, чтобы немного улучшить ваш код:

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_())
...