Allow QtProcess without local QApplication
This commit is contained in:
parent
3eeffd3b1d
commit
ef8c47e8c8
@ -325,7 +325,8 @@ class QtProcess(Process):
|
|||||||
GUI.
|
GUI.
|
||||||
- A QTimer is also started on the parent process which polls for requests
|
- A QTimer is also started on the parent process which polls for requests
|
||||||
from the child process. This allows Qt signals emitted within the child
|
from the child process. This allows Qt signals emitted within the child
|
||||||
process to invoke slots on the parent process and vice-versa.
|
process to invoke slots on the parent process and vice-versa. This can
|
||||||
|
be disabled using processRequests=False in the constructor.
|
||||||
|
|
||||||
Example::
|
Example::
|
||||||
|
|
||||||
@ -342,17 +343,28 @@ class QtProcess(Process):
|
|||||||
def __init__(self, **kwds):
|
def __init__(self, **kwds):
|
||||||
if 'target' not in kwds:
|
if 'target' not in kwds:
|
||||||
kwds['target'] = startQtEventLoop
|
kwds['target'] = startQtEventLoop
|
||||||
|
self._processRequests = kwds.pop('processRequests', True)
|
||||||
Process.__init__(self, **kwds)
|
Process.__init__(self, **kwds)
|
||||||
self.startEventTimer()
|
self.startEventTimer()
|
||||||
|
|
||||||
def startEventTimer(self):
|
def startEventTimer(self):
|
||||||
from pyqtgraph.Qt import QtGui, QtCore ## avoid module-level import to keep bootstrap snappy.
|
from pyqtgraph.Qt import QtGui, QtCore ## avoid module-level import to keep bootstrap snappy.
|
||||||
self.timer = QtCore.QTimer()
|
self.timer = QtCore.QTimer()
|
||||||
app = QtGui.QApplication.instance()
|
if self._processRequests:
|
||||||
if app is None:
|
app = QtGui.QApplication.instance()
|
||||||
raise Exception("Must create QApplication before starting QtProcess")
|
if app is None:
|
||||||
|
raise Exception("Must create QApplication before starting QtProcess, or use QtProcess(processRequests=False)")
|
||||||
|
self.startRequestProcessing()
|
||||||
|
|
||||||
|
def startRequestProcessing(self, interval=0.01):
|
||||||
|
"""Start listening for requests coming from the child process.
|
||||||
|
This allows signals to be connected from the child process to the parent.
|
||||||
|
"""
|
||||||
self.timer.timeout.connect(self.processRequests)
|
self.timer.timeout.connect(self.processRequests)
|
||||||
self.timer.start(10)
|
self.timer.start(interval*1000)
|
||||||
|
|
||||||
|
def stopRequestProcessing(self):
|
||||||
|
self.timer.stop()
|
||||||
|
|
||||||
def processRequests(self):
|
def processRequests(self):
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user