QComboBox mit Checkbox und Icon geht nicht

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

ich hab einen custom combobox für QtDesiger erstellt. Aufruf alles ok, kein Fehler.
aber es ist nichts in der comboBox drin. ich weiss nicht wieso
hier die custom combobox

Code: Alles auswählen

from PyQt6.QtWidgets import QListWidgetItem, QComboBox, QListWidget, QCheckBox, QWidget, QVBoxLayout
from PyQt6.QtGui import QIcon
from PyQt6.QtCore import Qt

class CustomComboBoxCheckIcon(QComboBox):
    def __init__(self, parent=None):
        super().__init__(parent)
        self._list_widget = QListWidget(self)
        self.setView(self._list_widget)
        self._list_widget.setAlternatingRowColors(True)
        self._list_widget.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded)
        self._list_widget.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded)
        self.addItems()

    def addItems(self):        
        social_media_dict = self.get_social_media_dict()
        for social, icon_path in social_media_dict.items():            
            item = QListWidgetItem(QIcon(f":\Buttons\_buttons\socialmedia\{icon_path}-25.png"), social)
            item.setFlags(item.flags() | Qt.ItemFlag.ItemIsUserCheckable)
            item.setCheckState(Qt.CheckState.Unchecked)
            # QListWidgetItem hinzufügen
            self._list_widget.addItem(item)   
    
    def get_social_media_dict(self):
        return  {"https://twitter.com": "twitter",
                "https://www.facebook.com/": "facebook",
                "https://www.instagram.com/": "instagram",
                "https://instagram.com/": "instagram",
                "https://onlyfans.com/": "onlyfans",
                "https://fancentro.com/": "fancentro",
                "https://linktr.ee/": "linktree",
                "https://www.loyalfans.com/": "loyalfans",
                "https://www.twitch.tv/": "twitch",
                "https://www.name.com/":"www"}

    def checkedItems(self):
        checked_items = []
        for index in range(self.view().count()):
            item = self.view().item(index)
            if item.checkState() == Qt.CheckState.Checked:
                checked_items.append(item.text())
        return checked_items
    
if __name__ == '__main__':
    CustomComboBoxCheckIcon(QComboBox)
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

Wem es interssiert: Hier meine Lösung: Google und Youtuber "Jie Jenn" + Logik :lol:

Code: Alles auswählen

class CustomComboBoxCheckIcon(QComboBox):
    def __init__(self, parent=None):
        super().__init__(parent)       
        self.view().pressed.connect(self.handleItemPressed)
        self.addItems()               

    def addItems(self):        
        social_media_dict = self.get_social_media_dict()
        for index, (social, icon_path) in enumerate(social_media_dict.items()):             
            icon_path = f":/Buttons/_buttons/socialmedia/{icon_path}-25.png"
            self.addItem(QIcon(icon_path), social)
            self.model().item(index, self.modelColumn()).setCheckState(Qt.CheckState.Unchecked)
    
    def handleItemPressed(self, index):
        social_media_dict = self.get_social_media_dict()
        item = self.model().itemFromIndex(index)
        
        if item.checkState() == Qt.CheckState.Checked:
            item.setCheckState(Qt.CheckState.Unchecked)
        else:
            item.setCheckState(Qt.CheckState.Checked)
Benutzeravatar
__blackjack__
User
Beiträge: 13117
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ernie1412: Funktioniert bei mir nicht. Wenn das funktionieren würde, dann würde man sich um den `checkState` ja auch gar nicht selber kümmern müssen. Ausserdem habe ich so etwas auch noch nie in einem anderen Programm gesehen, das ist also eine sehr komische, ungewohnte UI die Du dem Benutzer da anbieten willst. Wie benutzt man das denn? Wie schaut man beispielsweise nach was angehakt ist, *ohne* diesen Zustand zu *verändern*? Geht das überhaupt? Auch auf jeder Plattform?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

Bild

zugriff, hab ich auch in der custom combobox klasse

Code: Alles auswählen

def get_checked_items(self):
        checked_items = []
        for index in range(self.count()):
            model_index = self.model().index(index, self.modelColumn())
            item = self.model().itemFromIndex(model_index)
            if item.checkState() == Qt.CheckState.Checked:
                checked_items.append((item.text(),self.itemIcon(model_index.row())))
        return checked_items 
ich benutze windows 10, anderes OS kann ich hier nicht testen
Antworten