如何用PySide2和Python设置Maya导出文件路径
解决Maya PySide工具的导出路径保存问题
核心思路是通过类属性存储选中的文件夹路径,同时将路径同步到输入框,让其他导出按钮可以直接调用这个属性:
- 添加UI元素:包含用于显示路径的
QLineEdit和选择文件夹的QPushButton - 绑定槽函数:给"Set Export Folder"按钮绑定文件夹选择逻辑,更新输入框和类属性
- 复用路径:导出按钮的逻辑直接读取类中存储的路径
以下是修改后的完整代码示例(基于PySide2,适配Maya环境):
import maya.cmds as cmds from PySide2 import QtWidgets, QtCore class MayaFBXExporter(QtWidgets.QDialog): def __init__(self, parent=None): super(MayaFBXExporter, self).__init__(parent) self.setWindowTitle("FBX Exporter Tool") self.resize(400, 150) # 初始化导出路径属性,默认空 self.export_folder = "" self._build_ui() self._connect_signals() def _build_ui(self): main_layout = QtWidgets.QVBoxLayout(self) # 路径选择区域 path_layout = QtWidgets.QHBoxLayout() # 输入框:显示选中的路径 self.path_input = QtWidgets.QLineEdit() self.path_input.setReadOnly(True) # 设置为只读,避免手动修改 path_layout.addWidget(self.path_input) # 选择文件夹按钮 self.set_folder_btn = QtWidgets.QPushButton("Set Export Folder") path_layout.addWidget(self.set_folder_btn) main_layout.addLayout(path_layout) # 导出按钮区域 export_layout = QtWidgets.QHBoxLayout() self.export_anim_btn = QtWidgets.QPushButton("Export FBX Animation") export_layout.addWidget(self.export_anim_btn) self.export_rig_btn = QtWidgets.QPushButton("Export RIG") export_layout.addWidget(self.export_rig_btn) main_layout.addLayout(export_layout) def _connect_signals(self): # 绑定文件夹选择按钮的槽函数 self.set_folder_btn.clicked.connect(self._select_export_folder) # 绑定导出按钮的槽函数 self.export_anim_btn.clicked.connect(self._export_fbx_animation) self.export_rig_btn.clicked.connect(self._export_rig) def _select_export_folder(self): # 弹出文件夹选择对话框 folder_path = QtWidgets.QFileDialog.getExistingDirectory( self, "Select Export Folder", "", # 默认打开路径,可根据需求修改 QtWidgets.QFileDialog.ShowDirsOnly | QtWidgets.QFileDialog.DontResolveSymlinks ) if folder_path: # 更新输入框显示 self.path_input.setText(folder_path) # 保存路径到类属性,供其他按钮使用 self.export_folder = folder_path def _export_fbx_animation(self): # 检查路径是否已选择 if not self.export_folder: cmds.warning("Please select an export folder first!") return # 这里放入你已有的动画导出逻辑,使用self.export_folder作为路径 anim_export_path = f"{self.export_folder}/animation.fbx" # 示例导出命令(替换成你的实际代码) cmds.file(anim_export_path, force=True, options="v=0;", typ="FBX export", pr=True, es=True) cmds.info(f"Animation exported to: {anim_export_path}") def _export_rig(self): # 检查路径是否已选择 if not self.export_folder: cmds.warning("Please select an export folder first!") return # 这里放入你已有的RIG导出逻辑,使用self.export_folder作为路径 rig_export_path = f"{self.export_folder}/rig.fbx" # 示例导出命令(替换成你的实际代码) cmds.file(rig_export_path, force=True, options="v=0;", typ="FBX export", pr=True, es=True) cmds.info(f"RIG exported to: {rig_export_path}") # 启动工具 if __name__ == "__main__": # 避免重复创建窗口 try: exporter_dialog.close() exporter_dialog.deleteLater() except: pass exporter_dialog = MayaFBXExporter() exporter_dialog.show()
关键说明:
self.export_folder:作为类的实例属性,存储选中的文件夹路径,整个类的方法都可以直接访问_select_export_folder:处理文件夹选择逻辑,选中路径后同时更新输入框和类属性- 导出方法中的路径检查:在执行导出前先判断路径是否为空,避免报错
QLineEdit设置为只读:防止用户手动修改路径,确保路径来源唯一
内容的提问来源于stack exchange,提问作者Valeriya Fedoseeva
相关产品推荐
相关产品推荐

