如何在PyQt中动态创建列和行?

时间:2015-12-14 01:57:11

标签: python pyqt pyside

我正在使用Windows 7中的python3,PyQt5创建一个GUI桌面应用程序。

我要做的是:

  1. 当我的应用程序运行时,它使用QTableWidget创建一个空表。还有四个按钮。

  2. 当用户单击第一个按钮时,空表将获得2行和4列。

  3. 在这种情况下,如果用户单击另一个按钮,则会删除先前的列和行,并且该表将获得10列和20行。

  4. 我制作了一个空表,但我不知道如何动态制作列和行。

    这是我的代码:

    import sys
    from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QTableWidget, QPushButton
    
    class mainClass(QMainWindow):
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def initUI(self):
            self.tableWidget = tableManager()
            self.returnedTableWidget = self.tableWidget.makeTable(self)
    
            btnMaker = buttonManager()
            btnMaker.makeTestBtn(self)
    
            self.setGeometry(100, 100, 700, 600)
            self.show()
    
    
    class buttonManager(QWidget):
        def __init__(self):
            super().__init__()
    
        def makeTestBtn(self, parent):
            testBtn01 = QPushButton("2 X 4", parent)
            testBtn02 = QPushButton("4 X 8", parent)
            testBtn03 = QPushButton("8 X 16", parent)
            testBtn04 = QPushButton("16 X 32", parent)
    
            testBtn01.move(50, 450)
            testBtn02.move(200, 450)
            testBtn03.move(350, 450)
            testBtn04.move(500, 450)
    
    
    class tableManager(QWidget):
        def __init__(self):
            super().__init__()
    
        def makeTable(self, parent):
            self.tableMaker = QTableWidget(parent)
            self.tableMaker.setGeometry(50, 50, 600, 400)
    
            return self.tableMaker
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        mc = mainClass()
        sys.exit(app.exec_())
    


    我知道setRowCount()课程中有setColumnCount()QTableWidget个方法。但我不知道在我的代码中如何以及在何处使用这些方法。

1 个答案:

答案 0 :(得分:3)

创建行和列:
1 - 从db中获取所有数据 2 - 用于声明如下:

all_data = db.fetch
tbl = QtGui.QTableWidget(len(all_data),X) # X is The number of columns that you need  
header_labels = ['Column 1', 'Column 2', 'Column 3', 'Column 4',...]  
tbl.setHorizontalHeaderLabels(header_labels)
for row in all_data:
    inx = all_data.index(row)
    tbl.insertRow(inx)
    tbl.setItem(inx,Y,QTableWidgetItem(your data)) # Y is the column that you want to insert data  

例如:

all_data = [[1,2,3,4],[5,6,7,8]]
tbl = QtGui.QTableWidget(len(all_data),4)
header_labels = ['Column 1', 'Column 2', 'Column 3', 'Column 4']
tbl.setHorizontalHeaderLabels(header_labels)
for row in all_data:
    inx = all_data.index(row)
    tbl.insertRow(inx)
    tbl.setItem(inx,0,QTableWidgetItem(str(row[0]))
    tbl.setItem(inx,0,QTableWidgetItem(str(row[0]))
    tbl.setItem(inx,0,QTableWidgetItem(str(row[0]))

我希望它有用 当然,如果我不明白你的问题,我道歉