`
schi
  • 浏览: 205328 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

qtExampleUI-PyQt4与maya互动的例子

    博客分类:
  • maya
阅读更多
python_inside_maya中看到的一个简单的PyQt例子,我已经加入注释希望对大家有帮助。
如下图,点击Refresh按钮会将maya中所选的物体添加到列表中,如没选择任何物体则清空列表。



使用方法:
将qtExampleUI.py和pumpThread.py文件放到以下路径中
引用
C:/Documents and Settings/你的用户名/My Documents/maya/2008/prefs/scripts 
C:/Documents and Settings/你的用户名/My Documents/maya/scripts

在maya的脚本编辑器中的python面板中执行
import qtExampleUI
qtExampleUI.ExampleUI.Display()

# import qtExampleUI as qeui
# qeui.ExampleUI.Display()


qtExampleUI.py
# -*- coding: UTF-8 -*-

from PyQt4 import QtCore, QtGui 
import maya.cmds as cmds 
import pumpThread 

# UI class
class ExampleUI( QtGui.QDialog ): 
    def __init__( self, parent=None ): 
        super( ExampleUI, self ).__init__( parent ) 
        # Set some basic properties on the UI 
        # 设置UI的基本属性
        self.setWindowTitle( 'ExampleUI' ) 
        self.setObjectName( "ExampleUI" ) 
        self.setAttribute( QtCore.Qt.WA_DeleteOnClose ) 
        # Add a Layout and set it to the UI 
        # 添加一个Layout(布局)并设置到UI中
        self.mainLayout = QtGui.QVBoxLayout( self ) 
        self.setLayout( self.mainLayout ) 
        # Add a Button and set some properties. 
        # Also add it to a layout. 
        # 添加一个按钮并设置一些属性
        # 同时将它添加到layout中
        self.RefreshButton = QtGui.QPushButton() 
        self.RefreshButton.setText( "Refresh" ) 
        self.mainLayout.addWidget( self.RefreshButton ) 
        # Add a list and set it to the layout 
        # 添加一个列表并将它添加到layout中
        self.SelectionList = QtGui.QListWidget() 
        self.SelectionList.setMinimumSize( 250, 250 ) 
        self.mainLayout.addWidget( self.SelectionList ) 
        # Connect the Refresh Button to a function to populate the list 
        # using SIGNAL's 
        # 给Refresh按钮连接信号
        # 当按钮被点击,会调用_RefreshButtonFunc方法
        self.connect( self.RefreshButton, QtCore.SIGNAL( "clicked()" ),
                      self._RefreshButtonFunc ) 
        
    # 将maya中选择的物体添加到列表中的方法
    def _RefreshButtonFunc( self ): 
        ''' 
        Fill the list based on a maya selection 
        ''' 
        oSel = cmds.ls( sl=1 ) 
        if oSel: 
            self.SelectionList.clear() 
            for i in oSel: self.SelectionList.addItem( i )
            #[self.SelectionList.addItem(s) for s in oSel] 
        else: 
            self.SelectionList.clear() 
            
    @staticmethod 
    def Display(): 
        ''' 
        calls the window.  Typical PumpThread call 
        Use's a modified pumpThread that properly set's up the thread. 
        ''' 
        # We need a global to stop python gc the UI 
        global mainWindow 
        # We need pumpThread to make the UI responsive
        # 我们需要 pumpThread来让UI有回应
        pumpThread.initializePumpThread() 
        app = pumpThread.get_app() 
        if app: 
            # We can set the app to use a nice style 
            # 我们可以设置一个好看的样式
            app.setStyle( 'Plastique' ) 
            mainWindow = ExampleUI() 
            mainWindow.show()
            
#ExampleUI.Display()


pumpThread.py
########################### 
from PyQt4 import QtCore, QtGui 
import maya.utils as utils 
import sys 
import time 
import threading 
import maya.cmds as cmds 
pumpedThread = None 
app = None 
gPump = True 
def get_app(): 
    global app 
    return app 
def set_app( i_app ): 
    global app 
    testAppInstance = QtCore.QCoreApplication.instance() 
    if testAppInstance: 
        app = testAppInstance 
    else: 
        app = i_app 
def get_pt(): 
    global pumpedThread 
    return pumpedThread 
def set_pt( i_pt ): 
    global pumpedThread 
    pumpedThread = i_pt 
def pumpQt(): 
    global app 
    global gPump 
    processorEv = threading.Event() 
    def processor(): 
        app.processEvents() 
        processorEv.set() 
    while gPump: 
        utils.executeDeferred( processor ) 
        processorEv.wait() 
        processorEv.clear() 
        time.sleep( 0.01 ) 
def killProcess(): 
    global gPump 
    gPump = False 
def killPumpThread(): 
    if get_app(): 
        get_app().closeAllWindows() 
    if get_pt(): 
        while get_pt().isAlive(): 
            killProcess() 
        set_pt( None ) 
        set_app( None ) 
def initializePumpThread(): 
    global gPump 
    gPump = True 
    if get_pt() == None:
        set_app( QtGui.QApplication( sys.argv ) ) 
        set_pt( threading.Thread( target=pumpQt, args=() ) ) 
        get_pt().start() 
  • 大小: 163.3 KB
3
0
分享到:
评论
1 楼 jonike 2009-11-26  
呵呵,你把pumpThread.py 扩展了一下下,厉害啊.
有个问题想问问你,怎么将Qt窗口加入的maya中成为她的child子窗口,现在为这苦恼呢.
QQ:280032474

相关推荐

    Python库 | QT-PyQt-PySide-Custom-Widgets-0.1.8.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:QT-PyQt-PySide-Custom-Widgets-0.1.8.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    基于Python-PyQt5饭卡管理系统.zip

    基于Python-PyQt5饭卡管理系统.zip基于Python-PyQt5饭卡管理系统.zip 基于Python-PyQt5饭卡管理系统.zip基于Python-PyQt5饭卡管理系统.zip 基于Python-PyQt5饭卡管理系统.zip基于Python-PyQt5饭卡管理系统.zip 基于...

    基于Python-PyQt5的饭卡管理系统源码+详细注释+数据库.zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为...基于Python-PyQt5的饭卡管理系统源码+详细注释+数据库.zip

    基于Python-PyQt5的饭卡管理系统源码+详细注释+数据库sql.zip

    基于Python-PyQt5的饭卡管理系统源码+详细注释+数据库.zip 基于Python-PyQt5的饭卡管理系统源码+详细注释+数据库.zip 基于Python-PyQt5的饭卡管理系统源码+详细注释+数据库.zip 基于Python-PyQt5的饭卡管理系统源码+...

    yolov8-pyqt5实现精美界面支持图片视频和摄像检测源码第四套.zip

    yolov8-pyqt5实现精美界面支持图片视频和摄像检测源码第四套.zipyolov8-pyqt5实现精美界面支持图片视频和摄像检测源码第四套.zipyolov8-pyqt5实现精美界面支持图片视频和摄像检测源码第四套.zipyolov8-pyqt5实现精美...

    yolov5垃圾检测模型+有pyqt界面yolov5-pyqt5-garb-dataset.zip

    yolov5垃圾检测模型,有pyqt界面;yolov5垃圾检测模型+有pyqt界面yolov5-pyqt5-garb_dataset.zip;yolov5垃圾检测模型+有pyqt界面yolov5-pyqt5-garb_dataset.zip;yolov5垃圾检测模型+有pyqt界面yolov5-pyqt5-garb_...

    python-vlc-for-Pyqt5-master_ip摄像头_pyhton;vlc_pyqt5_pyqtvlc_vlc_源

    1. **源代码**:包括Python脚本,展示了如何使用PyVLC或pyqtvlc与VLC交互,以及如何构建PyQt5 GUI来展示IP摄像头的视频流。 2. **配置文件**:可能包含VLC或IP摄像头的配置信息,如网络地址、端口、认证凭证等。 3. ...

    PyQt Examples-PyQt5、PyQt4各种测试和例子(高分项目)

    python,PyQt Examples——PyQt5、PyQt4各种测试和例子(高分项目)个人经导师指导并认可通过的98分大作业设计项目,适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为...

    python27-pyqt4

    1. **QObjects与信号与槽机制**:PyQT4基于Qt库的QObject类,所有GUI组件都继承自这个类。QObject类引入了信号和槽的概念,这是PyQT4事件处理的关键。信号是对象状态改变时发出的通知,而槽是响应这些信号的函数。...

    tcp_udp_web_tools-pyqt5-master_pyqt5串口_pyqt5udp_pyqt5_pyqt5编写UDP

    在IT行业中,PyQT5是一个强大的图形用户界面(GUI)工具包,它是Python语言与Qt库的结合。本文将深入探讨PyQT5如何用于串口通信、UDP通信以及网络编程,以此来理解"tcp_udp_web_tools-pyqt5-master_pyqt5串口_pyqt5...

    python3-pyqt5-sip-4.19.19-2.el8.aarch64.rpm

    官方离线安装包,亲测可用

    基于Python-PyQt5的饭卡管理系统源码+详细注释+数据库

    基于Python-PyQt5的饭卡管理系统源码+详细注释+数据库,含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。...

    PyQt视频教程(下载自YouTube)

    01 - Intro basic GUI - PyQt with Python GUI Programming tutorial.mp4 02 - Application Structure - PyQt with Python GUI Programming tutorial.mp4 03 - Buttons - PyQt with Python GUI Programming tutorial...

    51CTO下载-PyQt4入门指南.pdf

    51CTO下载-PyQt4入门指南.pdf, 简单明了学习pyqt4

    PyQt5-PyQt-master.zip

    PyQt5-PyQt-master.zip 是一个包含PyQt5库源码和相关资源的压缩包。PyQt是一个用于Python的图形用户界面(GUI)开发工具包,它将Qt库的功能带入了Python世界。Qt库是由Trolltech(现为The Qt Company)开发的C++框架...

    pythonqt5教程从零开始-pyQt5QtDesigner简易入门教程.pdf

    **PyQt5与QtDesigner简介** PyQt5是Python编程语言的一个模块,它提供了一种在Python中使用Qt库的方式。Qt是一个跨平台的应用程序开发框架,广泛用于创建图形用户界面(GUI)。PyQt5使得Python程序员能够利用Qt库的...

    python聊天室---pyqt5+socket+Thread聊天室

    本项目“python聊天室---pyqt5+socket+Thread聊天室”旨在教授如何利用Python的PyQt5库创建一个聊天室应用,并通过Socket进行网络通信,同时采用多线程(Thread)来实现后台任务的异步执行。以下将详细解析这个项目的...

    1-Python-PyQt5

    1-Python-PyQt5

Global site tag (gtag.js) - Google Analytics