from PySide import QtCore, QtGui import shiboken import maya.OpenMayaUI as omui def getMainWindow(): ptr = omui.MQtUtil.mainWindow() qObj = shiboken.wrapInstance(long(ptr), QtCore.QObject) metaObj = qObj.metaObject() cls = metaObj.className() superCls = metaObj.superClass().className() if hasattr(QtGui, cls): base = getattr(QtGui, cls) elif hasattr(QtGui, superCls): base = getattr(QtGui, superCls) else: base = QtGui.QWidget mainWin = shiboken.wrapInstance(long(ptr), base) return mainWin class PBTester(QtCore.QObject): processStarted = QtCore.Signal(int, str, int, int) processUpdated = QtCore.Signal(int, int) processCompleted = QtCore.Signal(int) task1Finished = QtCore.Signal() task2Finished = QtCore.Signal() def __init__(self, parent=None): super(PBTester, self).__init__(parent) self.cancel = False def RunTasks(self): loop = QtCore.QEventLoop() self.processStarted.emit(0, "Primary Task", 0, 3) for obj in range(3): self.processUpdated.emit(0, obj) self.task1Finished.connect(loop.quit) QtCore.QTimer.singleShot(0, self._runTask1) loop.exec_() self.task1Finished.disconnect(loop.quit) self.task2Finished.connect(loop.quit) QtCore.QTimer.singleShot(0, self._runTask2) loop.exec_() self.task2Finished.disconnect(loop.quit) self.processCompleted.emit(0) def _runTask1(self): self.processStarted.emit(1, "First Subtask", 0, 1000) for index in range(1000): self.processUpdated.emit(1, index) self.processCompleted.emit(1) self.task1Finished.emit() def _runTask2(self): self.processStarted.emit(1, "Second Subtask", 0, 1000) for index in range(1000): self.processUpdated.emit(1, index) self.processCompleted.emit(1) self.task2Finished.emit() @QtCore.Slot() def Process(self): self.RunTasks() self.finished.emit() def __repr__(self): pass class PBUI(QtGui.QMainWindow): def __init__(self, parent=None): if parent is None: parent = getMainWindow() super(PBUI, self).__init__(parent) self.progressBars = [] self.progressBarLayouts = [] widget = QtGui.QWidget() self.layout = QtGui.QVBoxLayout() button = QtGui.QPushButton("Run Progress Bars") button.clicked.connect(self.runTests) self.layout.addWidget(button) self.pbLayout = QtGui.QVBoxLayout() self.layout.addLayout(self.pbLayout) widget.setLayout(self.layout) self.setCentralWidget(widget) self.show() def runTests(self): self.WorkerObject = PBTester() self.WorkerObject.processStarted.connect(self.addProgressBar) self.WorkerObject.processUpdated.connect(self.updateProgressBar) self.WorkerObject.processCompleted.connect(self.removeProgressBar) self.WorkerObject.RunTasks() @QtCore.Slot(int, str, int, int) def addProgressBar(self, index, name, min, max): widget = QtGui.QWidget() layout = QtGui.QVBoxLayout() label = QtGui.QLabel(name) layout.addWidget(label) progBar = QtGui.QProgressBar() progBar.setRange(min, max) layout.addWidget(progBar) widget.setLayout(layout) self.pbLayout.addWidget(widget) self.progressBars.insert(index, progBar) self.progressBarLayouts.insert(index, widget) QtGui.QApplication.processEvents() self.update() @QtCore.Slot(int, int) def updateProgressBar(self, index, value): progBar = self.progressBars[index] progBar.setValue(value) QtGui.QApplication.processEvents() self.update() @QtCore.Slot(int) def removeProgressBar(self, index): progBarWidget = self.progressBarLayouts.pop(index) self.progressBars.pop(index) self.pbLayout.takeAt(index) progBarWidget.deleteLater() QtGui.QApplication.processEvents() self.update() if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) win = QtGui.QWidget() PBUI(win) win.show() sys.exit(app.exec_())
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question