【发布时间】:2020-10-04 10:37:10
【问题描述】:
我有一个 QTableWidget,里面有 QLineEdits 作为 CellWidgets。 如果我清理桌子并用相同的功能重新填充它,它需要更长的时间才能完成。 在此示例中,差异在 0.1 和 3.9 秒之间,但在我的实际代码中,差异在 0.1 秒和 10 分钟之间。
下面是示例代码:
class Test_Layout(QWidget):
def __init__(self, parent=None):
super(Test_Layout, self).__init__(parent=None)
self.left = 0
self.top = 0
self.width = 0
self.height = 0
self.initUI()
self.isMaximized()
def initUI(self):
self.setGeometry(self.left, self.top, self.width, self.height)
self.createTable()
start_time = time.time()
self.fillTable()
print(time.time() - start_time)
self.combo = QComboBox(self)
self.combo.addItem("Reset")
for i in range(0, 5):
self.combo.addItem(str(i))
self.combo.currentTextChanged.connect(self.on_combo_changed)
self.vbox = QVBoxLayout()
self.vbox.addWidget(self.combo)
self.vbox.addWidget(self.table)
self.setLayout(self.vbox)
def fill_row(self, row):
self.table.insertRow(row)
placeholder = QLineEdit()
self.table.setCellWidget(row, 0, placeholder)
placeholder = QLineEdit()
self.table.setCellWidget(row, 1, placeholder)
placeholder = QLineEdit()
self.table.setCellWidget(row, 2, placeholder)
def on_combo_changed(self, currentText):
self.table.setRowCount(0)
if currentText == "Reset":
start_time = time.time()
self.fillTable()
print(time.time() - start_time)
else:
for row in range(0, int(currentText)):
self.fill_row(row)
def createTable(self):
self.table = QTableWidget()
self.table.setColumnCount(3)
self.table.setHorizontalHeaderLabels([
"LineEdit0",
"LineEdit1",
"LineEdit2",
])
header = self.table.horizontalHeader()
for i in range(0, 3):
header.setSectionResizeMode(i, QHeaderView.ResizeToContents)
def fillTable(self):
for row in range(0, 1000):
self.fill_row(row)
输出:
0.14005303382873535
在使用 QCombobox 并将其设置回“重置”之后:
3.9842889308929443
在有人问之前,我用 QLineEdits 填充 QTableWidget,因为我想使用占位符。
【问题讨论】:
-
只是出于好奇,为什么要在表格中填满 1000 个
QLineEdits而不仅仅是让表格可编辑? -
我在问题的最后写了这个,因为我想使用占位符,而 QTableWidgetItems 没有机会添加它们。
-
@VolLioMenTT 虽然我能理解这种需求,但使用可见的独立和持久的 QLineEdits 并不是一个好的选择,尤其是出于性能(速度和内存)的原因,因为您只需要显示一些东西而不是实际上 always 需要 QLineEdit 的所有功能来处理 all 3000 个单元格。此外,访问模型数据会更加困难,因为您需要始终访问行编辑才能获取其内容。
标签: python pyqt5 qt5 qtablewidget qlineedit