如何在 PyQt 中动态生成列和行?

How to make columns and rows dynamically in PyQt?

我正在使用 python3、windows 7 中的 PyQt5 制作 GUI 桌面应用程序。

我想做的是:

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

  2. 当用户单击第一个按钮时,空的 table 得到 2 行和 4 列。

  3. 在这种情况下,如果用户点击另一个按钮,之前的列和行将被删除,table得到10列和20行。

我做了一个空的table,但是我不知道如何动态地创建列和行。

这是我的代码:

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_())


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

创建行和列:
1 - 从 db
中获取所有数据 2 - 使用 for 语句如下:

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])))

希望有用
当然,如果我没有理解你的问题,我很抱歉