我想使用PySide for Autodesk Maya创建一个TreeView小部件,它可以显示目录的内容,如下例所示:
我确实找到了一个使用tkinter编写简单python脚本的示例: Tkinter: Treeview widget。但我想使用Pyside以便在Autodesk Maya中运行它
我确实创建了一个脚本,可以显示一个简单的TreeView小部件:
这是我的代码:
try:
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
from PySide2 import __version__
from shiboken2 import wrapInstance
import collections
import maya.OpenMayaUI as OpenMayaUI
except ImportError:
from PySide.QtCore import *
from PySide.QtGui import *
from PySide import __version__
from shiboken import wrapInstance
import collections
import maya.OpenMayaUI as OpenMayaUI
treepop = collections.defaultdict(list)
treepop[""]=['layer_1',
'layer_2',
'layer_3',
'layer_4',
'layer_5',
'layer_6',
'layer_12']
treepop["layer_2"] = ['layer_7',
'layer_9',
'layer_11']
treepop["layer_3"] = ['layer_7']
treepop["layer_8"] = ['layer_10']
treepop["layer_10"] = ['layer_13']
def mayaToQT(name):
# Maya -> QWidget
ptr = OpenMayaUI.MQtUtil.findControl(name)
if ptr is None: ptr = OpenMayaUI.MQtUtil.findLayout(name)
if ptr is None: ptr = OpenMayaUI.MQtUtil.findMenuItem(name)
if ptr is not None: return wrapInstance(long(ptr),
QWidget)
cmds.window()
layout = cmds.columnLayout(rowSpacing=10, columnWidth=250)
qwidget= mayaToQT(layout)
qlayout = qwidget.children()[0]
treeview = QTreeWidget()
treeview.setSelectionMode(QAbstractItemView.ExtendedSelection)
treeview.setColumnCount(1)
treeview.setAlternatingRowColors(True)
treeview.clear()
qlayout.addWidget(treeview)
items = []
for k in treepop[""]:
root_item = QTreeWidgetItem()
root_item.setText(0,k)
print(k)
if k in treepop:
for v in treepop[k]:
child_item = QTreeWidgetItem()
child_item.setText(0,v)
root_item.addChild(child_item)
items.append(root_item)
treeview.addTopLevelItems(items)
cmds.showWindow()
def getSelected():
items = treeview.selectedItems()
for i in items:
print(i.text(0))
谁能帮帮我吗!在
编辑: 我确实在你们的帮助下解决了问题,谢谢大家:
^{pr2}$但是有谁可以帮助设置QTreeView小部件的高度和宽度吗?在
QDirModel很棒。如果您需要其他解决方案,可以尝试以下方法:
它只是遍历一个起始目录,直到不再找到任何目录为止。在
你混合了maya和Qt控件,有什么原因吗?如果父窗口为none,qtwidges会自动创建一个窗口。一个很好的做法是将一个小部件子类化,使您能够将所有必需的数据保存在一个位置,如下所示:
然后你可以自动显示如果你添加自我展示()在self.fillTree公司()或从maya调用它:
^{pr2}$此时会出现一个窗口。此窗口不会始终位于Maya窗口的顶部。如果需要,请导入mayaMixin并从mixin继承:
接下来,您可以开始用正确的数据填充树并添加子项。使用当前项作为父项可以简单地添加子项:
^{4}$你需要整理你的数据!在你上次的评论中,你告诉我你不知道什么是你的数据,当你有了它,你可以循环使用它并用'while'或'for'将子元素添加到树中
我的文件夹={'parent1':{'Lips':['A','B','C']}}
下面这部分是要添加子项的循环:
任何事情都有可能最复杂的事情是组织你的数据
请注意,如果您正在尝试制作一个浏览器,那么在qtirmodel中有一个东西是QDirModel: QTreeView Display Directoryhttps://doc.qt.io/qtforpython/PySide2/QtWidgets/QDirModel.html
^{pr2}$相关问题 更多 >
编程相关推荐