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

4

我正在使用python3和PyQt5在Windows 7中制作GUI桌面应用程序。

我的目标是:

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

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

  3. 在这种情况下,如果用户单击另一个按钮,则将删除先前的列和行,并使表格具有10列20行。

我创建了一个空表,但我不知道如何动态生成列和行。

以下是我的代码:

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类中有setRowCount()setColumnCount()方法,但我不知道在代码中应该如何使用这些方法。


新的行和列应该是空的吗? - Mel
感谢您阅读我的问题,tmoreau。// 不,事实上,如果用户点击按钮,则会动态创建列和行,并用来自数据库的数据填充它们。 - passion053
1个回答

10

创建行和列:
1-从数据库获取所有数据
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])))

我希望这个对你有所帮助
当然,如果我没有理解你的问题,我道歉。


我做到了!你的指南非常有帮助!我将点击信号连接到使用insertRow()和insertColumn()创建列和行的函数中。谢谢Masood!附:哦,在你写的setItem方法中,必须再加一个括号。>3< - passion053

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接