Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从QAction触发器访问委托类_Python_Pyqt_Pyqt4 - Fatal编程技术网

Python 从QAction触发器访问委托类

Python 从QAction触发器访问委托类,python,pyqt,pyqt4,Python,Pyqt,Pyqt4,我有一个QListWidget,它对项目及其子项目进行分类(它们都是可检查的) 当前,当选中/取消选中类别项目时,子项目可以正常工作,我在上下文菜单中引入了一个选项,该选项的工作方式应与选中和取消选中类别项目的方式相同 但是,在我的update\u选项中,上下文菜单中的QAction允许我选中/取消选中类别项,但不会影响子项的选中状态 此外,似乎QListWidgetItem没有trigger或toggle信号可以用来触发委托类中的editorEvent IsCategoryRole=QtCor

我有一个QListWidget,它对项目及其子项目进行分类(它们都是可检查的)

当前,当选中/取消选中类别项目时,子项目可以正常工作,我在上下文菜单中引入了一个选项,该选项的工作方式应与选中和取消选中类别项目的方式相同

但是,在我的
update\u选项中,上下文菜单中的QAction允许我选中/取消选中类别项,但不会影响子项的选中状态

此外,似乎
QListWidgetItem
没有
trigger
toggle
信号可以用来触发委托类中的
editorEvent

IsCategoryRole=QtCore.Qt.UserRole
ParentRole=QtCore.Qt.UserRole+1
类CategoryDelegate(QtGui.QStyledItemDelegate):
def editorEvent(自身、事件、模型、选项、索引):
旧状态=model.data(索引,QtCore.Qt.CheckStateRole)
res=super(CategoryDelegate,self).editorEvent(
事件、模型、选项、索引
)
当前状态=model.data(索引,QtCore.Qt.CheckStateRole)
如果是旧州!=当前状态:
如果索引数据(IsCategoryRole):
pix=QtCore.QPersistentModelIndex(索引)
对于范围内的i(model.rowCount()):
ix=模型索引(i,0)
如果pix==ix.data(ParentRole):
model.setData(
ix,当前_状态,QtCore.Qt.CheckStateRole
)
返回res
类ListWidget(QtGui.QListWidget):
def uuu init uuu(self,parent=None):
超级(ListWidget,self)。\uuuuu初始化\uuuuuuuu(父级)
委派=类别委派(自我)
self.setItemDelegate(委托)
def addCategory(自我,文本):
item=ListWidget.创建可检查的项目(文本)
item.setData(IsCategoryRole,真)
自我添加项(项目)
退货项目
def addItemToCategory(自身、类别项目、文本):
item=ListWidget.创建可检查的项目(文本)
item.setData(IsCategoryRole,False)
ix=自索引项(类别项)
pix=QtCore.QPersistentModelIndex(ix)
item.setData(父角色,pix)
自我添加项(项目)
退货项目
@静力学方法
def创建可检查项目(文本):
item=QtGui.QListWidgetItem(文本)
item.setFlags(
项目.旗帜()
|QtCore.Qt.ItemIsUserCheckable
|QtCore.Qt.ItemIsEditable
)
item.setCheckState(QtCore.Qt.Unchecked)
退货项目
def鼠标压力事件(自身、事件):
如果event.button()==QtCore.Qt.RightButton:
列表菜单=QtGui.QMenu(自)
所选项目=self.currentItem()
如果选择了项目数据(IsCategoryRole):
更新_cat_items=QtGui.QAction(“全部检查或无检查”,self)
更新目录项。触发。连接(self.update选项)
列表菜单。添加操作(更新目录项)
list_menu.exec_(QtGui.QCursor().pos())
其他:
超级(ListWidget,self).mousePressEvent(事件)
def更新选项(自我):
所选项目=self.currentItem()
state=selected_item.checkState()#它返回0或2,而不是QtCore.Qt.Unchecked或QtCore.Qt.Checked
如果state==QtCore.Qt.Checked:
#如果首先选中了opt,则将其设置为uncheck
所选项目.setCheckState(QtCore.Qt.Unchecked)
其他:
#如果首先未选中opt,请将其设置为check
所选项目.setCheckState(QtCore.Qt.Checked)
类TestDialog(QtGui.QDialog):
def uuu init uuu(self,parent=None):
super(TestDialog,self)。\uuuu init\uuuuu()
self.listWidget=listWidget()
all_num=self.listWidget.addCategory(“--all Nums-->”)
num_items=[“一”、“二”、“三”]
对于num_项中的num:
self.listWidget.addItemToCategory(all_num,num)
all_letters=self.listWidget.addCategory(“--all letters-->”)
字母_项=[“A”、“B”、“C”]
对于字母中字母的项目:
self.listWidget.addItemToCategory(所有字母,字母)
layout=QtGui.QVBoxLayout(self)
layout.addWidget(self.listWidget)
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=QtGui.QApplication(sys.argv)
w=TestDialog()
w、 show()
sys.exit(app.exec_())
在我认为OP只希望在用户按下复选框时才允许该行为时,现在新方法将扩展该行为,为此,它不必是委托,而是创建一个自定义QListWistGeTestEnter,其中该方法重写SETATATA()方法:

从PyQt4导入QtCore,QtGui
IsCategoryRole=QtCore.Qt.UserRole
ParentRole=QtCore.Qt.UserRole+1
类ListWidgetItem(QtGui.QListWidgetItem):
def setData(自身、角色、值):
如果角色==QtCore.Qt.CheckStateRole和self.data(IsCategoryRole):
lw=self.listWidget()
索引=lw.indexFromItem(自)
pix=QtCore.QPersistentModelIndex(索引)
对于范围内的r(lw.count()):
印刷品(r)
it=lw.项目(r)
如果pix==it.data(ParentRole):
it.setData(角色、值)
超级(ListWidgetItem,self).setData(角色,值)
类ListWidget(QtGui.QListWidget):
def addCategory(自我,文本):
item=ListWidget.创建可检查的项目(文本)
item.setData(IsCategoryRole,真)
自我添加项(项目)
退货项目
def addItemToCategory(自身、类别项目、文本):
item=ListWidget.创建可检查的项目(文本)
item.setData(IsCategoryRole,False)
ix=自索引项(类别项)
pix=QtCore.QPersistentModelIndex(ix)
item.setData(父角色,pix)
自我添加项(项目)
退货项目