我是Python和Qt新手......
我正在开发一个GUI程序,它QTableWidget在开始时显示一个数据列表.
使用该setItem()方法将行插入表中.它们是QTableWidgetItem物体.
现在我想让用户点击选择某一行(QTableWidgetItem),我的程序将填充一个辅助行QTableWidget.
我了解到有一种叫做信号和插槽的东西.我会用那个吗?也有使用的例子installEventFilter(),但它不适合QTableWidgetItem.
单击QTableWidget单元格时,它仅选择单元格.如何配置tablewidget,以便在单击一个单元格时,将选择包含单元格的整行?
它可以使用信号,插槽完成.我很好奇有没有标准的做法呢?
我有一个QTableWidget第一列填充了可检查的项目,所以我需要重载这些项目才能对它们进行排序.当我单击该列的标题时,排序按预期工作(行已排序 - 首先是已检查的行,然后未检查).
当我运行我的GUI并且没有单击任何列的标题来排序表然后执行此操作时,会出现问题:
tableWidget.setSortingEnabled(0);
// check/uncheck some checkable items here
tableWidget.setSortingEnabled(1);
Run Code Online (Sandbox Code Playgroud)
在那种情况下,被覆盖的__lt__被称为100次以上,但我没想到,因为我没有点击该列的标题进行排序.那么,为什么__lt__叫?为什么它比较了一些可检查的项目,即使我没有点击该列的标题来对它们进行排序?
请帮助我,__lt__当我有30多行时,调用消耗太多时间.
我想从其构造函数中设置QTableWidget的子类为只读,但是我找不到在所有项目上放置标志的方法,并且由于在构造函数中调用了columnCount和rowCount,因此显示的代码不起作用。返回0。
for (int i=0;i<this->columnCount();i++) {
for (int j=0;j<this->rowCount();j++) {
this->item(i,j)->setFlags(Qt::ItemFlag::NoItemFlags);
}
}
Run Code Online (Sandbox Code Playgroud)
由于标题是通过Qt Designer使用双击表单进行初始化的,因此我无法从代码中了解列/行的计数(除非通过硬编码对其进行编码,但我想避免这种情况),但我找不到将标志应用于所有项目的任何方法。
我还看到了一些针对修改事件本身的变通办法,以防止数据修改,但是我也希望避免这种情况。
有没有一种方法可以正确设置这些标志,还是必须摆脱Qt Designer部分才能在构造函数中添加所有标头初始化?
这是我用来填充QT Designer中绘制的表格的代码.设计用于任何桌子的通用,它工作正常,但...当我尝试显示包含18列和~12000行的数据时,它只是冻结30秒或更长时间.那么,我做错了什么,有没有办法加快速度,保持代码仍然适合任何表?
那是我的代码:
...blablabla...
self.connect(self, SIGNAL("set"), self.real_set)
...blablabla...
def set_table(self, table, data):
self.emit(SIGNAL('set'), table, data)
def real_set(self, table, data):
"""
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Assuming data is list of dict and table is a QTableWidget.
Get first key and get len of contents
"""
for key in data:
rows = len(data[key])
table.setRowCount(rows)
break
"""
Forbid resizing(speeds up)
"""
table.horizontalHeader().setResizeMode(QHeaderView.Fixed)
table.verticalHeader().setResizeMode(QHeaderView.Fixed)
table.horizontalHeader().setStretchLastSection(False)
table.verticalHeader().setStretchLastSection(False)
"""
Set number of columns too
"""
table.setColumnCount(len(data))
table.setHorizontalHeaderLabels(sorted(data.keys()))
"""
Now fill data
"""
for n, key in enumerate(sorted(data.keys())):
for m, …Run Code Online (Sandbox Code Playgroud) 我的 Python Pyqt5 应用程序上有一个 tableWidget。问题是,当特定单元格发生变化时,我试图连接到 calculadora 函数,所以我有两个问题:
-现在我正在使用这个:
self.ui.tableWidget_Calculadora.itemChanged.connect(self.calculadora)
def calculadora_1(self):
print("Cell 1,1 Changes")
Run Code Online (Sandbox Code Playgroud)
但我想更具体一些,并在例如单元格 (1,1) 发生变化时进行连接,而不是任何单元格,即我的代码当前所做的事情。
我尝试使用这个:
self.ui.tableWidget_Calculadora.itemChanged(1,1).connect(self.calculadora)
Run Code Online (Sandbox Code Playgroud)
但我收到了这个错误:
TypeError: native Qt signal is not callable
Run Code Online (Sandbox Code Playgroud)
谢谢。
qtablewidget ×6
qt ×5
python ×4
c++ ×2
pyqt ×2
constructor ×1
pyqt4 ×1
pyqt5 ×1
qt-designer ×1
selection ×1