Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Ernie1412
User
Beiträge: 161 Registriert: Freitag 10. Januar 2020, 20:38
Freitag 5. Januar 2024, 22:39
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
Sonntag 7. Januar 2024, 12:50
Wem es interssiert: Hier meine Lösung: Google und Youtuber "Jie Jenn" + Logik
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)
__blackjack__
User
Beiträge: 13997 Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:
Dienstag 9. Januar 2024, 14:19
@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?
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Ernie1412
User
Beiträge: 161 Registriert: Freitag 10. Januar 2020, 20:38
Mittwoch 10. Januar 2024, 12:38
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