Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. How to create a combobox of checkboxes ?
Forum Updated to NodeBB v4.3 + New Features

How to create a combobox of checkboxes ?

Scheduled Pinned Locked Moved Solved General and Desktop
20 Posts 4 Posters 10.2k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ? Offline
    ? Offline
    A Former User
    wrote on last edited by
    #10

    So, it means that there is no solution other than using a list widget which can be open when you select multiple elements ?

    mrjjM 1 Reply Last reply
    0
    • ? A Former User

      So, it means that there is no solution other than using a list widget which can be open when you select multiple elements ?

      mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by mrjj
      #11

      @EJWA
      well you can hax it if you really feel like it

      from PyQt4 import QtCore, QtGui    
      app = QtGui.QApplication([])
      
      class Combo(QtGui.QComboBox):
          def __init__(self, *args, **kwargs):
              super(Combo, self).__init__()
              self.addItems(['Item_1','Item_2','Item_3','Item_4','Item_5'])
              self.show()
      
          def hidePopup (self):
              pass
      
      inst=Combo()
      sys.exit(app.exec_())
      

      https://stackoverflow.com/questions/25733891/how-to-cause-qcombobox-pull-down-menu-to-stay-open

      1 Reply Last reply
      0
      • ? Offline
        ? Offline
        A Former User
        wrote on last edited by
        #12

        Thanks very much. What about the tool button ? It is a good idea ?

         self.toolbutton = QtGui.QToolButton(self)
                self.toolbutton.setText('Select Categories ')
                self.toolmenu = QtGui.QMenu(self)
                for i in range(3):
                    action = self.toolmenu.addAction("Category " + str(i))
                    action.setCheckable(True)
                self.toolbutton.setMenu(self.toolmenu)
                self.toolbutton.setPopupMode(QtGui.QToolButton.InstantPopup)
        
        mrjjM 1 Reply Last reply
        0
        • ? A Former User

          Thanks very much. What about the tool button ? It is a good idea ?

           self.toolbutton = QtGui.QToolButton(self)
                  self.toolbutton.setText('Select Categories ')
                  self.toolmenu = QtGui.QMenu(self)
                  for i in range(3):
                      action = self.toolmenu.addAction("Category " + str(i))
                      action.setCheckable(True)
                  self.toolbutton.setMenu(self.toolmenu)
                  self.toolbutton.setPopupMode(QtGui.QToolButton.InstantPopup)
          
          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by
          #13

          @EJWA

          You mean to use toolbutton to popup menu ?
          or toolbutton inside combo box ?

          Using a popup menu might suffer from same issue to close when one is selected/checked.

          1 Reply Last reply
          0
          • ? Offline
            ? Offline
            A Former User
            wrote on last edited by
            #14

            the same functions as using a combobox with checkboxes

            mrjjM 1 Reply Last reply
            0
            • ? A Former User

              the same functions as using a combobox with checkboxes

              mrjjM Offline
              mrjjM Offline
              mrjj
              Lifetime Qt Champion
              wrote on last edited by
              #15

              @EJWA

              Both ways can work even if not usual function.

              Also if its rare user need to select multiple Categories its maybe ok.

              1 Reply Last reply
              0
              • ? Offline
                ? Offline
                A Former User
                wrote on last edited by
                #16

                Can I keep the toolbutton menu open when selecting multiple categories ?

                mrjjM 1 Reply Last reply
                0
                • ? A Former User

                  Can I keep the toolbutton menu open when selecting multiple categories ?

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by mrjj
                  #17

                  @EJWA

                  well yes but its more haxy than combo box
                  https://stackoverflow.com/questions/2050462/prevent-a-qmenu-from-closing-when-one-of-its-qaction-is-triggered/11571550#11571550
                  you might need to use event filter

                  Why dont u just use a dialog ?
                  Click button.
                  Dialog opens with ListView,
                  use checks one or more Categories.
                  User press ok to close.

                  1 Reply Last reply
                  2
                  • ? Offline
                    ? Offline
                    A Former User
                    wrote on last edited by
                    #18

                    Hello, it seems that this code doesn't work because I design the interface with QT creator, so I must generate the py file from the ui using the pyuic4 and then modify the py file. I am trying now this example and I

                    class CheckableComboBox(QtGui.QComboBox):
                        def __init__(self):
                            super(CheckableComboBox, self).__init__()
                            self.view().pressed.connect(self.handleItemPressed)
                            self.setModel(QtGui.QStandardItemModel(self))
                    
                        def handleItemPressed(self, index):
                            item = self.model().itemFromIndex(index)
                            if item.checkState() == QtCore.Qt.Checked:
                                item.setCheckState(QtCore.Qt.Unchecked)
                            else:
                                item.setCheckState(QtCore.Qt.Checked)
                    self.imploc_extension = CheckableComboBox()
                          
                            for i in range(4):
                                self.imploc_extension.addItem("csv")
                                self.imploc_extension.addItem("xls")
                                self.imploc_extension.addItem("mtx")
                                self.imploc_extension.addItem("txt")
                                item = self.imploc_extension.model().item(i, 0)
                                item.setCheckState(QtCore.Qt.Unchecked)
                    
                    jsulmJ 1 Reply Last reply
                    0
                    • ? A Former User

                      Hello, it seems that this code doesn't work because I design the interface with QT creator, so I must generate the py file from the ui using the pyuic4 and then modify the py file. I am trying now this example and I

                      class CheckableComboBox(QtGui.QComboBox):
                          def __init__(self):
                              super(CheckableComboBox, self).__init__()
                              self.view().pressed.connect(self.handleItemPressed)
                              self.setModel(QtGui.QStandardItemModel(self))
                      
                          def handleItemPressed(self, index):
                              item = self.model().itemFromIndex(index)
                              if item.checkState() == QtCore.Qt.Checked:
                                  item.setCheckState(QtCore.Qt.Unchecked)
                              else:
                                  item.setCheckState(QtCore.Qt.Checked)
                      self.imploc_extension = CheckableComboBox()
                            
                              for i in range(4):
                                  self.imploc_extension.addItem("csv")
                                  self.imploc_extension.addItem("xls")
                                  self.imploc_extension.addItem("mtx")
                                  self.imploc_extension.addItem("txt")
                                  item = self.imploc_extension.model().item(i, 0)
                                  item.setCheckState(QtCore.Qt.Unchecked)
                      
                      jsulmJ Offline
                      jsulmJ Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by
                      #19

                      @EJWA Modifying generated code isn't a good idea as your modifications will be lost next time the code is generated...

                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      0
                      • ? Offline
                        ? Offline
                        A Former User
                        wrote on last edited by
                        #20

                        Finally,

                        I will use listwidget, it us easier. Thank you for all your help.

                        1 Reply Last reply
                        0

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved