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

2024-09-28 22:47:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Windows7中使用python3和PyQt5制作一个图形用户界面桌面应用程序。

我要做的是:

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


Tags: selfmoveinitdefsys按钮pyqt5class
1条回答
网友
1楼 · 发布于 2024-09-28 22:47:28

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

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

相关问题 更多 >