Kar*_*sov 5 python pyqt4 pyside
我试图在tablewidget的水平(列)标题中放置一个复选框.基于此处的其他帖子(因为基础对象类型相同),我试过这个:
item = QtGui.QTableWidgetItem()
item.setCheckState(QtCore.Qt.Checked)
self.tableWidget.setHorizontalHeaderItem(1, item)
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
self.tableWidget.horizontalHeaderItem(1).setCheckState(QtCore.Qt.Checked)
Run Code Online (Sandbox Code Playgroud)
这些都不会在水平标题中生成一个复选框.建议表示赞赏.
这并不是那么漂亮,但qt-project.org网站上的常见问题解答中发布了解决方案。
我已经针对 Python 调整了解决方案,并进行了评论中建议的一些更改。
from PyQt4.QtCore import Qt, QRect
from PyQt4.QtGui import QTableWidget, QApplication, QHeaderView, QStyleOptionButton, QStyle
import sys
class MyHeader(QHeaderView):
isOn = False
def __init__(self, orientation, parent=None):
QHeaderView.__init__(self, orientation, parent)
def paintSection(self, painter, rect, logicalIndex):
painter.save()
QHeaderView.paintSection(self, painter, rect, logicalIndex)
painter.restore()
if logicalIndex == 0:
option = QStyleOptionButton()
option.rect = QRect(10, 10, 10, 10)
if self.isOn:
option.state = QStyle.State_On
else:
option.state = QStyle.State_Off
self.style().drawControl(QStyle.CE_CheckBox, option, painter)
def mousePressEvent(self, event):
self.isOn = not self.isOn
self.updateSection(0)
QHeaderView.mousePressEvent(self, event)
class MyTable(QTableWidget):
def __init__(self):
QTableWidget.__init__(self, 3, 3)
myHeader = MyHeader(Qt.Horizontal, self)
self.setHorizontalHeader(myHeader)
if __name__ == '__main__':
app = QApplication(sys.argv)
myTable = MyTable()
myTable.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4537 次 |
| 最近记录: |