如何在 PyQt 中动态生成列和行?
How to make columns and rows dynamically in PyQt?
我正在使用 python3、windows 7 中的 PyQt5 制作 GUI 桌面应用程序。
我想做的是:
当我的应用程序运行时,它使用 QTableWidget 生成一个空 table。还有四个按钮。
当用户单击第一个按钮时,空的 table 得到 2 行和 4 列。
在这种情况下,如果用户点击另一个按钮,之前的列和行将被删除,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])))
希望有用
当然,如果我没有理解你的问题,我很抱歉
我正在使用 python3、windows 7 中的 PyQt5 制作 GUI 桌面应用程序。
我想做的是:
当我的应用程序运行时,它使用 QTableWidget 生成一个空 table。还有四个按钮。
当用户单击第一个按钮时,空的 table 得到 2 行和 4 列。
在这种情况下,如果用户点击另一个按钮,之前的列和行将被删除,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])))
希望有用
当然,如果我没有理解你的问题,我很抱歉