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 populate a dataframe in a QDialog using PyQT

How to populate a dataframe in a QDialog using PyQT

Scheduled Pinned Locked Moved Unsolved General and Desktop
24 Posts 5 Posters 10.8k 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.
  • P Piyush

    @mrjj Hi,
    I tried that too but getting an error: "TypeError: setItem(self, int, int, QTableWidgetItem): first argument of unbound method must have type 'QTableWidget'"

    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #11

    @Piyush

    QTableWidget.setItem(m, n, newitem)
    

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

    P 1 Reply Last reply
    0
    • jsulmJ jsulm

      @Piyush

      QTableWidget.setItem(m, n, newitem)
      
      P Offline
      P Offline
      Piyush
      wrote on last edited by
      #12

      @jsulm Hi,
      I have used the same line of code. But still I am getting the error: "TypeError: setItem(self, int, int, QTableWidgetItem): first argument of unbound method must have type 'QTableWidget'". Here is the snippet:

      def Dialog(self):
           table = self.MyTable(data,5,3)
           table.show()
           self.table = table
           
      def MyTable(self,data,*args):
           self.data = data
           horHeaders = []
           for n, key in enumerate(sorted(self.data.keys())):
              horHeaders.append(key)
              for m, item in enumerate(self.data[key]):
                  newitem = QTableWidgetItem(item)
                  QTableWidget.setItem(m, n, newitem)
                  QTableWidget.setHorizontalHeaderLabels(horHeaders)
           print horHeaders,newitem
      
      jsulmJ JonBJ 2 Replies Last reply
      0
      • P Piyush

        @jsulm Hi,
        I have used the same line of code. But still I am getting the error: "TypeError: setItem(self, int, int, QTableWidgetItem): first argument of unbound method must have type 'QTableWidget'". Here is the snippet:

        def Dialog(self):
             table = self.MyTable(data,5,3)
             table.show()
             self.table = table
             
        def MyTable(self,data,*args):
             self.data = data
             horHeaders = []
             for n, key in enumerate(sorted(self.data.keys())):
                horHeaders.append(key)
                for m, item in enumerate(self.data[key]):
                    newitem = QTableWidgetItem(item)
                    QTableWidget.setItem(m, n, newitem)
                    QTableWidget.setHorizontalHeaderLabels(horHeaders)
             print horHeaders,newitem
        
        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #13

        @Piyush Maybe

        super(QTableWidget, self).setItem(m, n, newitem)
        

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

        P 1 Reply Last reply
        0
        • P Piyush

          @jsulm Hi,
          I have used the same line of code. But still I am getting the error: "TypeError: setItem(self, int, int, QTableWidgetItem): first argument of unbound method must have type 'QTableWidget'". Here is the snippet:

          def Dialog(self):
               table = self.MyTable(data,5,3)
               table.show()
               self.table = table
               
          def MyTable(self,data,*args):
               self.data = data
               horHeaders = []
               for n, key in enumerate(sorted(self.data.keys())):
                  horHeaders.append(key)
                  for m, item in enumerate(self.data[key]):
                      newitem = QTableWidgetItem(item)
                      QTableWidget.setItem(m, n, newitem)
                      QTableWidget.setHorizontalHeaderLabels(horHeaders)
               print horHeaders,newitem
          
          JonBJ Offline
          JonBJ Offline
          JonB
          wrote on last edited by JonB
          #14

          @Piyush said in How to populate a dataframe in a QDialog using PyQT:

                  QTableWidget.setItem(m, n, newitem)
                  QTableWidget.setHorizontalHeaderLabels(horHeaders)
          

          The left hand side for setItem()/setHorizontalHeaderLabels() must be your actual table (widget) variable. You are passing the class/type QTableWidget. Hence the error message.

          Also while I'm here, your MyTable() does not return anything, and does not inherit from anything either.

          P jsulmJ 2 Replies Last reply
          0
          • jsulmJ jsulm

            @Piyush Maybe

            super(QTableWidget, self).setItem(m, n, newitem)
            
            P Offline
            P Offline
            Piyush
            wrote on last edited by
            #15

            @jsulm said in How to populate a dataframe in a QDialog using PyQT:

            super(QTableWidget, self).setItem(m, n, newitem)

            Actually no, since super will call a class object.

            1 Reply Last reply
            0
            • JonBJ JonB

              @Piyush said in How to populate a dataframe in a QDialog using PyQT:

                      QTableWidget.setItem(m, n, newitem)
                      QTableWidget.setHorizontalHeaderLabels(horHeaders)
              

              The left hand side for setItem()/setHorizontalHeaderLabels() must be your actual table (widget) variable. You are passing the class/type QTableWidget. Hence the error message.

              Also while I'm here, your MyTable() does not return anything, and does not inherit from anything either.

              P Offline
              P Offline
              Piyush
              wrote on last edited by
              #16

              @JonB Hi,
              Could you give me the code for that? Since I am not able to get it.

              JonBJ jsulmJ 2 Replies Last reply
              0
              • JonBJ JonB

                @Piyush said in How to populate a dataframe in a QDialog using PyQT:

                        QTableWidget.setItem(m, n, newitem)
                        QTableWidget.setHorizontalHeaderLabels(horHeaders)
                

                The left hand side for setItem()/setHorizontalHeaderLabels() must be your actual table (widget) variable. You are passing the class/type QTableWidget. Hence the error message.

                Also while I'm here, your MyTable() does not return anything, and does not inherit from anything either.

                jsulmJ Offline
                jsulmJ Offline
                jsulm
                Lifetime Qt Champion
                wrote on last edited by
                #17

                @JonB Somehow I was thinking MyTable is a class derived from QTableWidget :-)

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

                1 Reply Last reply
                0
                • P Piyush

                  @JonB Hi,
                  Could you give me the code for that? Since I am not able to get it.

                  JonBJ Offline
                  JonBJ Offline
                  JonB
                  wrote on last edited by
                  #18

                  @Piyush
                  Well, (as usual for me) I don't really understand what it is you are trying to do or ask about.

                  Are you simply wishing to create a QDialog and then put a QTableWidget on it, so it's a dialog which has a table (among possibly other widgets) on it?

                  P 1 Reply Last reply
                  0
                  • P Piyush

                    @JonB Hi,
                    Could you give me the code for that? Since I am not able to get it.

                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by
                    #19

                    @Piyush said in How to populate a dataframe in a QDialog using PyQT:

                    Could you give me the code for that? Since I am not able to get it.

                    In your dialog you should have an instance of QTableWidget, right?
                    Something like:

                    self.tableWidget = QTableWidget()
                    

                    Then it would be

                    self.tableWidget.setItem(m, n, newitem)
                    

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

                    P 1 Reply Last reply
                    0
                    • JonBJ JonB

                      @Piyush
                      Well, (as usual for me) I don't really understand what it is you are trying to do or ask about.

                      Are you simply wishing to create a QDialog and then put a QTableWidget on it, so it's a dialog which has a table (among possibly other widgets) on it?

                      P Offline
                      P Offline
                      Piyush
                      wrote on last edited by
                      #20

                      @JonB Exactly, I want a QDialog and then put a table on it.

                      jsulmJ JonBJ 2 Replies Last reply
                      0
                      • jsulmJ jsulm

                        @Piyush said in How to populate a dataframe in a QDialog using PyQT:

                        Could you give me the code for that? Since I am not able to get it.

                        In your dialog you should have an instance of QTableWidget, right?
                        Something like:

                        self.tableWidget = QTableWidget()
                        

                        Then it would be

                        self.tableWidget.setItem(m, n, newitem)
                        
                        P Offline
                        P Offline
                        Piyush
                        wrote on last edited by
                        #21

                        @jsulm I am getting empty/none table. Here is the code snippet:

                        def Dialog(self):
                             table = self.MyTable(data,5,3)
                             table.show()
                             self.table = table
                                 
                        def MyTable(self,data,*args):
                             self.data = data
                             self.tableWidget = QTableWidget()
                             horHeaders = []
                             for n, key in enumerate(sorted(self.data.keys())):
                                horHeaders.append(key)
                                for m, item in enumerate(self.data[key]):
                                    newitem = QTableWidgetItem(item)
                                    self.tableWidget.setItem(m, n, newitem)
                                    self.tableWidget.setHorizontalHeaderLabels(horHeaders)
                        
                        jsulmJ 1 Reply Last reply
                        0
                        • P Piyush

                          @JonB Exactly, I want a QDialog and then put a table on it.

                          jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on last edited by
                          #22

                          @Piyush said in How to populate a dataframe in a QDialog using PyQT:

                          Exactly, I want a QDialog and then put a table on it.

                          So, did you create a table in your dialog? It is really hard to follow you as you do not provide much information.

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

                          1 Reply Last reply
                          1
                          • P Piyush

                            @jsulm I am getting empty/none table. Here is the code snippet:

                            def Dialog(self):
                                 table = self.MyTable(data,5,3)
                                 table.show()
                                 self.table = table
                                     
                            def MyTable(self,data,*args):
                                 self.data = data
                                 self.tableWidget = QTableWidget()
                                 horHeaders = []
                                 for n, key in enumerate(sorted(self.data.keys())):
                                    horHeaders.append(key)
                                    for m, item in enumerate(self.data[key]):
                                        newitem = QTableWidgetItem(item)
                                        self.tableWidget.setItem(m, n, newitem)
                                        self.tableWidget.setHorizontalHeaderLabels(horHeaders)
                            
                            jsulmJ Offline
                            jsulmJ Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on last edited by
                            #23

                            @Piyush You're not creating any rows/columns.
                            See http://doc.qt.io/qt-5/qtablewidget.html

                            tableWidget = new QTableWidget(this);
                            tableWidget->setRowCount(10);
                            tableWidget->setColumnCount(5);
                            

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

                            1 Reply Last reply
                            2
                            • P Piyush

                              @JonB Exactly, I want a QDialog and then put a table on it.

                              JonBJ Offline
                              JonBJ Offline
                              JonB
                              wrote on last edited by JonB
                              #24

                              @Piyush

                              OK, so I don't know what all the earlier discussion was about, but a QTableWidget is simply a QWidget like any other widget, and I presume you know how to add widgets to dialogs.

                              Your code will look like:

                              dlg = QDialog()
                              tbl = QTableWidget()
                              dlg.addWidget(tbl)
                              tbl.setHorizontalHeaderLabels(...)
                              tbl.setRowCount(...)
                              tbl.setColumnCount(...)
                              ...
                              item = QTableWidgetItem(...)
                              tbl.setItem(m, n, item)
                              

                              If you want to create a dedicated dialog for this, you might go:

                              class MyDialog(QDialog):
                                  def __init__(self, parent=None):
                                      super().__init__(parent)
                              
                                      self.tbl = QTableWidget()
                                      self.addWidget(self.tbl)
                                      self.tbl.setHorizontalHeaderLabels(...)
                                      self.tbl.setRowCount(...)
                                      self.tbl.setColumnCount(...)
                                      ...
                                      item = QTableWidgetItem(...)
                                      self.tbl.setItem(m, n, item)
                              

                              That's the skeleton outline. As @jsulm says, you need to create the actual rows/columns in the table (tbl.setRow/ColumnCount()) to hold the QTableWidgetItems you create.

                              1 Reply Last reply
                              2

                              • Login

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