2014-05-02 106 views
0
import Tkinter,multiprocessing 

class cambiar(object): 
    def __init__(self,master,estado=False): 
     self.master = master 
     if estado == False: 
      self.run() 

    def run(self): 
     self.master['text'] = 'que tal' 

class body(object): 
    def __init__(self,win): 
     self.win = win 
     lista = ['label','botones'] 
     cont = len(lista) 
     for i in range(cont): 
      eval('self.'+str(lista[i]+'()')) 

    def label(self): 
     self.label_1 = Tkinter.Label(self.win,text='hola') 
     self.label_1.grid(row=0,column=0) 

    def botones(self): 
     self.boton_1 = Tkinter.Button(self.win,text='cambiar',command=lambda :self.win.proceso(self.label_1)) 
     self.boton_1.grid(row=1,column=0) 


class main(Tkinter.Tk): 
    def __init__(self): 
     Tkinter.Tk.__init__(self) 
     self.geometry('500x500') 
     self.b = body(self) 

    def proceso(self,wid): 
     self.p = multiprocessing.Process(target=cambiar,args=(wid,)) 
     self.p.start() 

root = main() 
root.mainloop() 

我有这样的代码,奇怪的是,我想要的是学习主进程可以改变属性,比如在这种情况下的标签,没有人知道我该怎么做?如何使用多重处理更改tkinter中的标签?

回答

0
  1. 如果这是你的代码,我不知道你为什么使用多处理而不是线程。
  2. 使用multiprocessing.Pool并等待异步呼叫的未来准备就绪。您可以通过安排一个测试未来状态的功能root.after来等待。并行计算完成时更改标签=未来有值时更改标签。
+0

只使用多处理例如,实际的代码是用于Kivy,但我使用tkinter进行测试,并且Kivy要求我为程序使用多处理,有没有办法通过多处理来执行我想要的操作? – user3509050

+0

是的,有办法,但他们不是很好,因为你不能引用一个创建的对象。 http://stackoverflow.com/questions/21968278/multiprocessing-share-unserializable-objects-between-processes尝试编号2.你不应该改变另一个进程的标签,而是从主循环线程。 – User

+0

看看侧栏。有很有用的链接。这是其中之一:http://stackoverflow.com/questions/15057789/multiprocessing-in-python-tkinter?rq=1 – User