Seite 1 von 1

QComboBox mit Checkbox und Icon geht nicht

Verfasst: Freitag 5. Januar 2024, 22:39
von Ernie1412
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)

Re: QComboBox mit Checkbox und Icon geht nicht

Verfasst: Sonntag 7. Januar 2024, 12:50
von Ernie1412
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)

Re: QComboBox mit Checkbox und Icon geht nicht

Verfasst: Dienstag 9. Januar 2024, 14:19
von __blackjack__
@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?

Re: QComboBox mit Checkbox und Icon geht nicht

Verfasst: Mittwoch 10. Januar 2024, 12:38
von Ernie1412
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