注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

银河军团大本营

光荣的军团,永远的丰碑 <坚持原创>

 
 
 

日志

 
 

PyQt QTableView嵌入QCheckBox  

2012-10-18 22:17:27|  分类: PyQt |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

  关联文章:PyQt QTableView嵌入QComboBox

  Qt里在QTableView中嵌入QCheckBox挺简单,用QItemDelegate就可以很方便地实现,不过要想让CheckBox居中则有点麻烦,好在稍稍做一些处理就可以实现,下面以PyQt为例(提示:一个CheckBoxDelegate可以用于多个列):

#coding=utf-8

from PyQt4.QtCore import *
from PyQt4.QtGui import *

class CheckBoxDelegate(QItemDelegate):

def __init__(self, parent=None):
QItemDelegate.__init__(self, parent)
self.chkboxSize = 19 #?!

def createEditor(self, parent, option, index):
chkbox = QCheckBox(parent)
chkbox.setText('')
chkbox.setTristate(False) #只用两个状态
left = option.rect.x() + (option.rect.width() - self.chkboxSize) / 2
top = option.rect.y() + (option.rect.height() - self.chkboxSize) / 2
chkbox.setGeometry(left, top, self.chkboxSize, self.chkboxSize)
return chkbox

def paint(self, painter, option, index):
value = index.data().toBool()
opt = QStyleOptionButton()
opt.state |= QStyle.State_Enabled | (QStyle.State_On if value else QStyle.State_Off)
opt.text = ''
left = option.rect.x() + (option.rect.width() - self.chkboxSize) / 2
top = option.rect.y() + (option.rect.height() - self.chkboxSize) / 2
opt.rect = QRect(left, top, self.chkboxSize, self.chkboxSize)
QApplication.style().drawControl(QStyle.CE_CheckBox, opt, painter)

def updateEditorGeometry(self, editor, option, index):
pass

###############################################################################

if __name__ == '__main__':

import sys

app = QApplication(sys.argv)

table = QTableView()
model = QStandardItemModel(3, 3, table)
model.setHorizontalHeaderLabels(['Name', 'Description', 'Animal?'])
model.setData(model.index(0, 0, QModelIndex()), QVariant('Squirrel'))
model.setData(model.index(0, 1, QModelIndex()), QVariant(u'可爱的松树精灵'))
model.setData(model.index(0, 2, QModelIndex()), QVariant(True))
model.setData(model.index(1, 0, QModelIndex()), QVariant('Soybean'))
model.setData(model.index(1, 1, QModelIndex()), QVariant(u'他站在田野里吹风'))
model.setData(model.index(1, 2, QModelIndex()), QVariant(False))
table.setModel(model)
table.setItemDelegateForColumn(2, CheckBoxDelegate(table))
table.resizeColumnToContents(1)
table.horizontalHeader().setStretchLastSection(True)
table.setGeometry(80, 20, 400, 300)
table.setWindowTitle('Grid + CheckBox Testing')
table.show()

sys.exit(app.exec_())

  下面是在Ubuntu中的效果图:

PyQt QTableView嵌入QCheckBox - 银河军团 - 银河军团大本营
  评论这张
 
阅读(3199)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018