QTableWidget 花样界面遇坑记

QTableWidget 某一列插入Check列,走了弯路,大概的意思是在QTableCell中插入一个Layout,然后在layout中放入一个QCheckBox

ck = QCheckBox()
h = QHBoxLayout()
h.setAlignment(Qt.AlignCenter)
h.addWidget(ck)
w = QWidget()
w.setLayout(h)
self.tv.setItem(j,0,item)

初步实现显示Checkbox的效果,但留下许多后遗症,比如Checkbox的高度不对,第二点击Checkbox后不触发CellChanged事件,在网上查了很久,发现还有一个更简洁有效的方法:

参考1 stackoverflow

	def init_data_checkable(self):
		for j in range(self.bst.nrows) :
			item = QTableWidgetItem()
			item.setFlags(Qt.ItemIsUserCheckable|Qt.ItemIsEnabled)
			item.setCheckState(Qt.Unchecked)
			item.setData(LastStateRole, item.checkState())
			self.tv.setItem(j,0,item)
			self.tv.cellChanged.connect(self.handleItemClicked)
      	
    def handleItemClicked(self,row,col):
		# print item
		item = self.tv.item(row, col)
		lastState = item.data(LastStateRole)
		currentState = item.checkState()
		if currentState != lastState:
			print("changed: ")
			if currentState == QtCore.Qt.Checked:
				print("checked")
			else:
				print("unchecked")
			item.setData(LastStateRole, currentState)

如此,事件触发完毕

LastStateRole = QtCore.Qt.UserRole

LastStateRole 功能还不太了解,毕竟不影响使用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值