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
Forum Updated to NodeBB v4.3 + New Features

How to populate a dataframe in a QDialog using PyQT

Scheduled Pinned Locked Moved Unsolved General and Desktop
24 Posts 5 Posters 9.7k 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

    @jsulm Hi,
    Actually the answer you gave was not relevant.

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

    @Piyush

    Hi
    To put a table on/in a Dialog.
    You must have your own dialog. So subclass is highly relevant :)
    There is no other way. Except table it self can be window. but then its not dialog like.

    listview example
    https://www.pythoncentral.io/pyside-pyqt-tutorial-qlistview-and-qstandarditemmodel/

    dialog example
    https://gist.github.com/justinfx/1951709

    P 1 Reply Last reply
    2
    • P Piyush

      @jsulm Hi,
      Actually the answer you gave was not relevant.

      jsulmJ Online
      jsulmJ Online
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #7

      @Piyush Please explain why it is not relevant?
      You're trying to use QDialog to show a table. The standard QDialog does not know anything about your table. That's why you need to subclass QDialog and show the table there.

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

      1 Reply Last reply
      2
      • mrjjM mrjj

        @Piyush

        Hi
        To put a table on/in a Dialog.
        You must have your own dialog. So subclass is highly relevant :)
        There is no other way. Except table it self can be window. but then its not dialog like.

        listview example
        https://www.pythoncentral.io/pyside-pyqt-tutorial-qlistview-and-qstandarditemmodel/

        dialog example
        https://gist.github.com/justinfx/1951709

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

        @mrjj Hi,
        So this is what I am trying to do. But getting an error. "My app object has no attribute set item"

        self.ui.btn1.clicked.connect(self.Dialog)
        def Dialog(self):
        table = self.MyTable(data,5,3)
        #table.setWindowFlags(table.windowFlags() | Qt.Window)
        table.show()
        self.table = table

        def MyTable(self,data,*args):
             QTableWidget.__init__(self)
             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)
                    self.setItem(m, n, newitem)
                    self.setHorizontalHeaderLabels(horHeaders)
             print horHeaders,newitem
        
        1 Reply Last reply
        0
        • mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by
          #9

          Hi
          you must call setItem(m, n, newitem) on the QTableWidget not via Self since in this case Self seems to be app.

          P 1 Reply Last reply
          1
          • mrjjM mrjj

            Hi
            you must call setItem(m, n, newitem) on the QTableWidget not via Self since in this case Self seems to be app.

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

            @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 1 Reply Last reply
            0
            • 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 Online
              jsulmJ Online
              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 Online
                  jsulmJ Online
                  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 Online
                    JonBJ Online
                    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 Online
                          jsulmJ Online
                          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 Online
                            JonBJ Online
                            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 Online
                              jsulmJ Online
                              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 Online
                                    jsulmJ Online
                                    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 Online
                                      jsulmJ Online
                                      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 Online
                                        JonBJ Online
                                        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