我想删除第一列标题中的箭头,以便标题与复选框居中。所有这些都不会禁用对列进行排序的可能性。
这是我现在的代码。
import sys
from PySide6.QtCore import Qt
from PySide6.QtWidgets import (
QApplication,
QProxyStyle,
QStyle,
QTableWidget,
QTableWidgetItem,
)
class ProxyStyle(QProxyStyle):
def subElementRect(self, e, opt, widget):
r = super().subElementRect(e, opt, widget)
if e == QStyle.SE_ItemViewItemCheckIndicator:
r.moveCenter(opt.rect.center())
return r
class Table(QTableWidget):
def __init__(self):
QTableWidget.__init__(self, 3, 1)
self._style = ProxyStyle(self.style())
self.setStyle(self._style)
for i in range(self.rowCount()):
for j in range(self.columnCount()):
it = QTableWidgetItem()
self.setItem(i, j, it)
it.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable)
it.setCheckState(Qt.Checked if (i + j) % 2 == 0 else Qt.Unchecked)
if __name__ == "__main__":
app = QApplication(sys.argv)
w = Table()
w.show()
sys.exit(app.exec_())
最简单的解决方案是重写DrawControl()
并将QStyleOptionHeader的指示器
设置为0,如果该列与要隐藏的列匹配。
class ProxyStyle(QProxyStyle):
# ...
def drawControl(self, ctl, opt, qp, widget=None):
if ctl == QStyle.CE_HeaderSection and opt.orientation == Qt.Horizontal:
if opt.section == widget.parent().property('hideSortIndicatorColumn'):
opt.sortIndicator = 0
super().drawControl(ctl, opt, qp, widget)
class Table(QTableWidget):
def __init__(self):
# ...
self.setProperty('hideSortIndicatorColumn', 0)
请注意,对于有子部件的复杂部件,在小部件上设置样式并不总是足够的。
在您的情况下,它是有效的,因为您将当前样式添加到了代理构造函数中,但这意味着样式的所有权将完全由代理获得,任何其他QWidget将从那一刻起使用代理(这几乎与将代理设置为整个应用程序相同)。
替代方案是创建不带任何参数的代理(在这种情况下,将使用默认本机样式的新实例),但这也意味着部件的子级将不会继承样式,因为QStyles不会传播给它们的子级。
问题内容: 我有一个QTableWidget,我将此表中的数据导出到一个csv文件中。但是现在,我想打开一个现有的csv文件,并使用此数据填充我的表。我该怎么做? 这是我的导出代码,我想要一个“填充”代码,我真的不知道该怎么做。.我知道如何读取一个csv,但我不知道如何用此csv数据填充我的表。 问题答案: 看起来您可以在此处使用该模块: PyQt5版本:
问题内容: 这是我用来填写QT Designer中绘制的表格的代码。设计为对任何表通用,它可以正常工作,但是…当我尝试显示包含18列和〜12000行的datasat时,它冻结30秒或更长时间。因此,我做错了什么,有没有办法加快速度,保持代码仍然适合任何表? 那是我的代码: 问题答案: 这里是一个测试脚本,它比较了几种填充表格的方法。 自定义模型要快得多,因为它不必先创建所有项- 但请注意,这是一个
问题内容: 如何按最高编号对pyqt中的一列进行排序?目前,我只能按最高数字(例如1,1,1,1,2,2,2,3,3)对它进行排序,例如,我想按最高数字(例如58,25 ,15,10)。谢谢! 资料更新: 整个代码: 问题答案: 它按字母数字排序(因此,按照字符串,“ 1”,“ 10”,“ 11”,“ 12”,“ 2”,“ 20”,“ 21”,“ 22”,“ 3”,“ 4’等是正确的排序顺序。对于
问题内容: 在jquery数据表中,我可以禁用特定的列排序 有人知道如何在有角JS中执行此操作吗? 此代码隐藏了我的搜索栏,但无法隐藏我的第一列和第四列的排序功能? 问题答案: 的角度数据表等价于 是 … 您必须包括在控制器中: 参见 http://l-lin.github.io/angular- datatables/archives/#!/api 。
问题内容: JavaFX2的TableView具有“用户在运行时重新排序列”的功能。我想为我的应用程序中的一个特定表禁用此功能。 查看API文档,没有明显的API挂钩。但是,有-property。根据文档,它代表 属于此TableView的TableColumns。当用户重新排序TableView列时,此列表将更新以反映当前的视觉顺序。 希望我至少能够在发生更改后重置更改,所以我尝试添加一个侦听器
问题内容: 我试图禁用pickerView中的特定行。 我有一个用于pickerView的字符串数组。当用户选择特定的行时,我将值追加到array1中。 之后,如果array1具有array的值,则当用户再次打开pickerView时,我想这样做,应该禁用pickerView的值。 我怎样才能做到这一点? 问题答案: 选项1:禁用元素 您可以使用pickerView:attributedTitle