QTableView 二次整理
一、设置可视化的组件
参考:
http://www.cnblogs.com/ribavnu/p/4810412.html
二、常用基本属性
http://www.cnblogs.com/ribavnu/p/4791393.html
三、编辑后提示是否保存
http://www.cnblogs.com/ribavnu/p/4702532.html
四、设置特定列是否能编辑
#
# C_TableView
# 在QTreeView基础上增加限制 特定列是否 可以编辑
#
class C_TableView(QTableView):
def __init__(self, parent=None):
QTableView.__init__(self, parent)
# 设置可以编辑的 列
# column:list
self.c_allow_edit = list()
#
# 设置可以编辑的 列
# allow_edit :list,
# value : 可以编辑的多个列, 列编号从0开始
def c_setAllowEdit(self, allow_edit):
self.c_allow_edit = allow_edit def edit(self, index, trigger, event): args = [index, trigger, event]
columnIndex = index.column() if event is not None:
# 2:鼠标的按下,3:鼠标的释放
# 4:鼠标的双击
# 如果 列 是否可以编辑
event_type = event.type()
if event_type ==4:
if columnIndex not in self.c_allow_edit :
return False return_value =super(QTableView, self) .edit( *args)
return return_value
五、设置特定列的代理,对 一 的 补充。
void QAbstractItemView::setItemDelegateForRow(int row, QAbstractItemDelegate *delegate)
# 自定义复选框checkbox
class Delegate_CheckBox(QtWidgets.QStyledItemDelegate): def createEditor(self, parent, option, index): editor = QtWidgets.QCheckBox('是', parent)
# 填充背景
#editor.setAutoFillBackground(True)
#editor.setGeometry(self.checkBoxRect(option)) return editor # 计算 check_box的位置 和 大小
def checkBoxRect(self, option): but_style = QtWidgets.QStyleOptionButton()
check_box_rect =QtWidgets. QApplication.style().subElementRect(
QtWidgets.QStyle.SE_CheckBoxIndicator,
but_style) check_box_point = QtCore.QPoint(option.rect.x() +
option.rect.width() / 2 -
check_box_rect.width() / 2,
option.rect.y() +
option.rect.height() / 2 -
check_box_rect.height() / 2);
return QtCore.QRect(check_box_point, check_box_rect.size()) def paint(self, painter, option, index): from PyQt5.QtWidgets import QStyle # 如果选中则高亮
if option.state & QStyle.State_Selected:
painter.fillRect(option.rect, option.palette.highlight()) #获取值
checked = index.model().data(index, QtCore.Qt.DisplayRole)
checked = int(checked)
#按钮的风格选项
checkBoxOption = QtWidgets.QStyleOptionButton()
checkBoxOption.state |= QtWidgets.QStyle.State_Enabled;
#根据值判断是否选中
if checked > 0 :
checkBoxOption.state |= QtWidgets.QStyle.State_On
else :
checkBoxOption.state |= QtWidgets.QStyle.State_Off #返回QCheckBox几何形状
checkBoxOption.rect = self.checkBoxRect(option)
#绘制QCheckBox
QtWidgets.QApplication.style().drawControl(QtWidgets.QStyle.CE_CheckBox,checkBoxOption,painter) def setEditorData(self, spinBox, index): data = index.data()
data = int(data)
if data > 0:
spinBox.setChecked(True)
else:
spinBox.setChecked(False) def setModelData(self, spinBox, model, index): data = spinBox.isChecked()
if data:
model.setData(index, 1)
else:
model.setData(index, 0) def updateEditorGeometry(self, editor, option, index):
# 原始的就这么一句话
#editor.setGeometry(option.rect) # 居中显示
rect = option.rect
option_x= rect.x()
option_y = rect.y()
option_width = rect.width()
# 微调下左边,误差原因不明
rect.moveTo(option_x + option_width /2 - 8 , option_y)
editor.setGeometry(rect)
六、
设置tableview背景透明
from PyQt5.QtGui import QPalette, QBrush, QColor
palette = tableView.palette()
palette.setBrush(QPalette.Base,QBrush(QColor(255,255,255,0)))
tableView.setPalette(palette)
QTableView 二次整理的更多相关文章
- 函数基础(二)(day11整理)
目录 昨日内容 函数的定义 函数的三种定义方式 空函数 有参函数 无参函数 函数的调用 函数的返回值 函数的参数 形参 实参 今日内容 可变长参数 可变长形参 可变长实参(仅作了解) 函数对象 函数嵌 ...
- xfs磁盘(文件)碎片查看和整理
网上有些帖子说XFS不用做碎片整理,其实是错误的.XFS用延迟写入等技术确实可以减少碎片的出现,但是如果服务器用了几年,并且文件操作比较频繁,还是会出现碎片的,应该整理.注意:在Debian中XFS相 ...
- Excel表3级数据整理工具
前言 做专题经常会遇到做数据级联的需求,大部分需求都长一个模样.销售给你一个excel表,然后你做一个省市经销商的级联.不知道以前大家是怎么样做的,我之前是把excel复制到sublime中,然后使用 ...
- 重新整理 .net core 实践篇—————日志系统之结构化[十八]
前言 什么是结构化呢? 结构化,就是将原本没有规律的东西进行有规律话. 就比如我们学习数据结构,需要学习排序然后又要学习查询,说白了这就是一套,没有排序,谈如何查询是没有意义的,因为查询算法就是根据某 ...
- RocketMQ架构原理解析(二):消息存储
一.概述 由前文可知,RocketMQ有几个非常重要的概念: broker 服务端,负责存储.收发消息 producer 客户端1,负责产生消息 consumer 客服端2,负责消费消息 既然是消息队 ...
- delphi控件属性大全-详解-简介
http://blog.csdn.net/u011096030/article/details/18716713 button 组件: CAPTION 属性 :用于在按钮上显示文本内容 Cancel ...
- Java 之 I/O 系列 01 ——基础
Java 之 I/O 系列 目录 Java 之 I/O 系列 01 ——基础 Java 之 I/O 系列 02 ——序列化(一) Java 之 I/O 系列 02 ——序列化(二) 整理<疯狂j ...
- Hadoop经典面试题(转)
单项选择题 1. 下面哪个程序负责 HDFS 数据存储. a)NameNode b)Jobtracker c)Datanode d)secondaryNameNode e)tasktracker 2. ...
- 2.JAVA垃圾回收机制
前言 线程独享的内存区域有程序计数器,虚拟机栈,本地方法栈,这些区域不用考虑内存回收的问题,随着线程的执行结束,自然就回收了,而堆内存和方法区的回收则不一样,他们的内存分配和回收是动态的. 1.对象存 ...
随机推荐
- 学校的统一订书80%该烧掉——IT推荐书单
学校的统一订书80%该烧掉——IT推荐书单 作者: 夏浅音.py 中文图书个人黑名单:清华大学出版社的国产作者,例如一段错n次的谭浩强.一页错n次的严蔚敏... 中文图书个人白名单:机械工业出版社.电 ...
- 第一章 flex单词计数程序
学习Flex&Bison目标, 读懂SQLite中SQL解析部分代码 Flex&Bison简介Flex做词法分析Bison做语法分析 第一个Flex程序, wc.fl, 单词计数程序 ...
- 目标(web前端)
在学习web前端开发技术之前,对该课程的了解并不多,目标就是好好认真学习该课程的每一点知识,并好好掌握它.老师说该课程的内容比较多而且繁杂,那我希望我可以在今后的学习中有耐心的学好该门课程.
- The Secret Mixed-Signal Life of PWM Peripherals
The Secret Mixed-Signal Life of PWM Peripherals Pulse-width modulation (PWM) peripherals have enjoye ...
- android:碎片的概念
碎片(Fragment)是一种可以嵌入在活动当中的 UI 片段,它能让程序更加合理和充分 地利用大屏幕的空间,因而在平板上应用的非常广泛.虽然碎片对你来说应该是个全新的概 念,但我相信你学习起来应该毫 ...
- CustomJsonDateDeserializer @JsonDeserialize(using = CustomJsonDateDeserializer.class) Jackson 反序列化Date时遇到的问题 java中json日期属性反序列化
public class CustomJsonDateDeserializer extends JsonDeserializer<Date> { @Override public Date ...
- MDX Cookbook 12 - 计算 SMA 简单移动平均 LastPeriods() 函数的使用
先认识一下这几个名词 Moving Average (MA) 移动平均,或者叫做移动平均线,是技术分析中一种分析时间序列数据的工具.最常见的就是利用股价,回报或交易量等变数计算出移动平均.可以利用移动 ...
- JAVA中通过JavaCV实现跨平台视频/图像处理-调用摄像头
一.简介 JavaCV使用来自计算机视觉领域(OpenCV, FFmpeg, libdc1394, PGR FlyCapture, OpenKinect, librealsense, CL PS3 E ...
- 基于Ubuntu搭建Seafile专属网盘
系统要求: Ubuntu 16.04.1 LTS 64 位操作系统 安装 Seafile 服务器 安装依赖环境 在 Debian/Ubuntu 系统下,可以使用以下命令安装 MySQL: sudo a ...
- imp-oracle10g数据库dmp导入到11g数据库提示IMP-00058,表或试图不存在
拿了一份从10g数据库导出的dmp,本机安装的是11.2g的oracle数据库,执行imp导入后提示: IMP-00058: 遇到 ORACLE 错误 942ORA-00942: 表或视图不存在 开始 ...