Here it is...., This version has fixed our threading errors that occurred
where maya wouldn't close correctly and leave 1 mayapy thread open.

-Dave

###########################

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()

On Fri, Oct 23, 2009 at 8:41 PM, Sylvain Berger <sylvain.ber...@gmail.com>wrote:

> Where can I find your version of pumpThread?
>
> Thanks
>
>
> On Tue, Sep 29, 2009 at 5:24 AM, David Moulder 
> <da...@thirstydevil.co.uk>wrote:
>
>> Ok,  Here's and basic example with PyQT and a QListWidget...
>> Please note.  This use's a modified pumpThread module.  The default one
>> from the maya dev kit has given us lots of problems.
>> Thanks to some very clever people on this list we now have a working
>> pumpThread module that is heavily tested here at work.
>>
>> from PyQt4 import QtCore, QtGui
>> import pymel as pm
>> import pumpThread
>>
>> class ExampleUI(QtGui.QDialog):
>>     def __init__(self, parent=None):
>>         super(ExampleUI, self).__init__(parent)
>>         # Set some basic properties on the UI
>>         self.setWindowTitle('ExampleUI')
>>         self.setObjectName("ExampleUI")
>>         self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
>>
>>     # Add a Layout and set it to the UI
>>         self.mainLayout = QtGui.QVBoxLayout(self)
>>         self.setLayout(self.mainLayout)
>>
>>         # Add a Button and set some properties.  Also add it to a layout.
>>         self.RefreshButton = QtGui.QPushButton()
>>         self.RefreshButton.setText("Refresh")
>>         self.mainLayout.addWidget(self.RefreshButton)
>>
>>         # Add a list and set it to the 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
>>         self.connect(self.RefreshButton, QtCore.SIGNAL("clicked()"),
>> self._RefreshButtonFunc)
>>
>>     def _RefreshButtonFunc(self):
>>         '''
>>         Fill the list based on a maya selection
>>         '''
>>         oSel = pm.selected()
>>         if oSel:
>>             self.SelectionList.clear()
>>             [self.SelectionList.addItem(s.name()) 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.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()
>>
>> I'll post our final pumpThread later today.
>>
>> -Dave
>>
>>
>>
>> On Tue, Sep 29, 2009 at 6:42 AM, floyd1510 <vshingr...@gmail.com> wrote:
>>
>>>
>>> Hello all,
>>>
>>> I have got PyQt up and running in Maya 2009. I was wondering if
>>> someone could guide me to a few examples, like adding a list of
>>> objects from maya into the QT listview or adding items dynamically to
>>> a combo box etc.
>>>
>>> I appreciate the help.
>>>
>>> Cheers,
>>> Vikram.
>>>
>>>
>>>
>>
>>
>>
>
>
> --
> "A pit would not be complete without a Freeman coming out of it."
> The Vortigaunt
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/python_inside_maya
-~----------~----~----~----~------~----~------~--~---

Reply via email to