2015-04-24 4 views
1

Я помню, как я видел сообщение о том, что можно получить рисунок в питоне от основного потока, но я не могу его найти. Моя первая попытка идет примерно так, но это не работает. Первоначально это не сбой (в конце концов), но никакого рисунка не происходит. Идея заключается в том, что options является отображением графических функций, каждая из которых подходит к pyqtgraph или QTWidget и т.д.Получение чертежа с главной нити

from threading import * 
from Queue import * 

anObject1 = DrawingObject() 
anObject2 = DrawingObject() 
anObject3 = DrawingObject() 


options = { 
    0 : anObject1.drawing_func, 
    1 : anObject2.drawing_func, 
    2 : anObject3.drawing_func, 
    3 : updateNon, 
} 

def do_work(item): #item is a tuple with the item at 0 is the index to which function 
    #print str(item) + "\n" 
    options[item[0]](item) 

def worker(): 
    while True: 
     item = q.get() 
     do_work(item) 
     q.task_done() 

q = Queue() 

#This function is a callback from C++ 
def callback(s, tuple): 
    #options[tuple[0]](tuple) #this works 
    q.put(tuple) #this does not 



num_worker_threads = 3 
for i in range(num_worker_threads): 
    t = Thread(target=worker) 
    t.daemon = True 
    t.start() 
+0

Вы имели в виду эту тему: https://groups.google.com/forum/#!msg/pyqtgraph/haiJsGhxTaQ/sTtMa195dHsJ – dnozay

+0

Спасибо, что это не так, но это наверняка похоже на хорошее чтение! – Ivan

ответ

0

Я понимаю, что это невозможно сделать в QWidget вне основной GUI поток. Вы можете найти много ссылок на это на форумах и документации Qt. Тем не менее, можно запустить подпроцесс, который рисует изображение в общей памяти, а затем отображает изображение в основном процессе. Это подход, принятый pyqtgraph/widgets/RemoteGraphicsView.py; см. пример examples/RemoteSpeedTest.py.