PyQt/partner_625781186/15_Plugins/PluginManager/PluginStore/StoreModel.py
2018-09-24 14:51:53 +08:00

128 lines
4.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
"""
tableview的模型.
"""
from PyQt5 import QtGui, QtWidgets, QtCore
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
PluginFileCol = 0
h1 = 1
h2 = 2
MTime = 3
CTime = 4
AutoStartCol = 5
class FileModel(QFileSystemModel):
"""
继承QFileSystemModel.
"""
RE_UN_LoadSignal = pyqtSignal(object)
AutoStartSignal = pyqtSignal(object)
def __init__(self , manager=None , *a, **kw):
super(FileModel,self).__init__(*a,**kw )
self.manager = manager
def columnCount(self, index):
"""
添加了两列
"""
return 6
def headerData(self, section, Orientation, role=Qt.DisplayRole):
if Orientation==1:
if section == PluginFileCol:
return "文件名"
# elif section == h1:
# return "Si"
# elif section == h2:
# return "Ty"
elif section == MTime:
return "修改时间"
elif section == CTime:
return "创建时间"
elif section == AutoStartCol:
return "允许自启动"
return super(FileModel,self).headerData(section, Orientation, role)
# ===== 如何让model/view界面出现复选框 =====
def flags(self, index):
"""
flag描述了view中数据项的状态信息
"""
column = index.column()
if column==PluginFileCol:
# 首先获取超类的flags返回值
flag = super(FileModel, self).flags(index)
# 或运算将ItemIsEditable可编辑标志叠加上去
return flag | Qt.ItemIsEnabled \
| Qt.ItemIsUserCheckable\
| Qt.ItemIsSelectable
else:
return Qt.ItemIsEnabled \
| Qt.ItemIsSelectable\
| Qt.ItemIsUserCheckable
def data(self, index , role = Qt.DisplayRole):
"""
根据值来显示界面信息.
"""
if not index.isValid() :
# 亦或者当前的索引值不在合理范围即小于等于0超出总行数
return QVariant() # 返回一个QVariant相当与空条目
column = index.column()
# 复选框角色
if role == Qt.CheckStateRole:
if column == PluginFileCol:
mod = index.data()[:-3]
return (Qt.Checked
if self.manager.pluginsInfo["StartModule"][mod]["active"]
else Qt.Unchecked)
elif column == AutoStartCol:
mod = self.index(index.row(), PluginFileCol,
self.manager.index).data()[:-3]
return (Qt.Checked
if self.manager.jsonPlugin[mod]["Allow"]
else Qt.Unchecked)
# 文本角色
if role == Qt.DisplayRole:
if column == CTime:
mod = self.index(index.row(), PluginFileCol,
self.manager.index).data()[:-3]
return self.manager.jsonPlugin[mod]["CreateTime"]
elif column == AutoStartCol:
mod = self.index(index.row(), PluginFileCol,
self.manager.index).data()[:-3]
return str(self.manager.jsonPlugin[mod]["Allow"] )
return super(FileModel,self).data(index , role)
def setData(self, index, value, role = Qt.DisplayRole):
"""
数据驱动界面 , 发射信号修改数据即可.
"""
if not index.isValid() :
# 亦或者当前的索引值不在合理范围即小于等于0超出总行数
return QVariant()
if role == Qt.CheckStateRole:
mod = self.index(index.row(), PluginFileCol,
self.manager.index).data()[:-3]
if index.column() == PluginFileCol:
self.RE_UN_LoadSignal.emit((mod, index))
elif index.column() == AutoStartCol:
self.AutoStartSignal.emit(mod)
return super(FileModel,self).setData(index , value, role)
# ===== 如何让model/view界面出现复选框 =====