6
votes

Cases à cocher dans une combinaison par pyqt

Je dois implémenter une liste déroulante contenant des cases à cocher, ce qui aime avoir les entrées dans une case à cocher ComboBox. Mais qcombobox n'accepte pas qcheckbox comme membre et je n'ai pas pu trouver de solution alternative. I a trouvé une implémentation en C ++ sur le wiki Qt, mais je ne sais pas comment Portez-le à Python.


0 commentaires

3 Réponses :


7
votes

Quand j'avais besoin de cela, je monte une solution plus facile (au moins il n'est pas nécessaire de sous-classer qcombobox). Cela a fonctionné pour moi. C'est créer un menu avec des actions à checkable et définissez-la sur un bouton. Ensuite, connectez-vous soit le menu ou les actions à une fente.

Le code dans qt (n'utilisez pas encore Pyqt, désolé, j'espère que vous pouvez le faire du port, vous semble plus facile à moi) était quelque chose comme ça: xxx

espère que cela aide


1 commentaires

Merci, c'était une réponse utile, m'a sauvé du travail de Lotta



2
votes

J'ai répondu une question similaire à Comment créer une vue d'arborescence (avec la case à cocher) dans une liste déroulante - Pyqt , mais de toute façon et pour la complétude dans la réponse que je vous en colle ici:

Vous devriez Créez un modèle qui supporte Qt.CheckSaterole dans les méthodes de données et de SetData et le drapeau Qt.ItemisUserComphaeckable dans la méthode des indicateurs.

Je colle Vous êtes ici un exemple que j'utilise dans un projet, il s'agit d'une implémentation générique QsortfilterProxyModel Pour utiliser dans n'importe quel modèle, mais vous pouvez utiliser les mêmes idées de votre modèle de mise en œuvre, j'utilise évidemment des structures internes dans cette sous-classe que vous n'avez pas directement dans PYQT et que vous êtes attaché à ma mise en œuvre interne (auto.boolyeeNet et Self.Readonyset). < / p> xxx


1 commentaires

Personnellement, je trouverais cela vraiment utile si quelqu'un pouvait poster un exemple de travail minimal.



6
votes

Utilisez le modèle d'élément Combobox, car les éléments de support d'éléments Il vous suffit de marquer l'article pour être vérifiable par l'utilisateur et de définir une vérification initiale pour que la case à cocher apparaisse (elle ne montre que s'il existe un état valide) xxx pré>

ici est un Exemple de sous-classe minimale: P>

from PyQt5 import QtGui, QtCore, QtWidgets
import sys, os

# subclass
class CheckableComboBox(QtWidgets.QComboBox):
    # once there is a checkState set, it is rendered
    # here we assume default Unchecked
    def addItem(self, item):
        super(CheckableComboBox, self).addItem(item)
        item = self.model().item(self.count()-1,0)
        item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
        item.setCheckState(QtCore.Qt.Unchecked)

    def itemChecked(self, index):
        item = self.model().item(i,0)
        return item.checkState() == QtCore.Qt.Checked

# the basic main()
app = QtWidgets.QApplication(sys.argv)
dialog = QtWidgets.QMainWindow()
mainWidget = QtWidgets.QWidget()
dialog.setCentralWidget(mainWidget)
ComboBox = CheckableComboBox(mainWidget)
for i in range(6):
    ComboBox.addItem("Combobox Item " + str(i))

dialog.show()
sys.exit(app.exec_())


0 commentaires