2016-09-06 96 views
0

我有下面的一段代碼,並希望在文本框中輸入一個字符串後啓動線程,但只要我運行程序時線程開始執行,任何想法?當創建它的方法被執行時,該線程是否應該啓動?線程無按鈕事件啓動Tkinter

class FuncThread(threading.Thread): 

    def __init__(self, target, *args): 
     self._target = target 
     self._args = args 
     threading.Thread.__init__(self) 

    def run(self): 
     self._target(*self._args) 


class BuildGui():   

    def show_entry_fields(self, 
         release_version=None): 
     print("Release Version: %s\n" % release_version) 
     pattern = re.compile('^\d*\.\d*\.\d*$') 
     if re.match(pattern, release_version): 
      self.thread_execute_build(release_version=release_version) 
     else: 
      print "Enter a valid release version (e.g. 5.3.2)" 
      e1.delete(0, 'end') 


    def execute_build(self, 
        release_version=None): 
     cmd_build_jenkins = 'java -jar jenkins-cli.jar -s http://xyz:8080/ build "New ESW build" -s -p "release_version"=' + str(release_version) 
     os.system(cmd_build_jenkins) 

    def thread_execute_build(self, 
         release_version=None): 
     self.build_thread = FuncThread(self.execute_build, release_version) 
     self.build_thread.start() 

if __name__ == '__main__': 

    master = Tk() 
    Label(master, text="Release Version").grid(row=0) 

    e1 = Entry(master) 

    e1.grid(row=0, column=1) 

    gui = BuildGui() 
    Button(master, text='Quit', command=master.quit).grid(row=3, column=0, sticky=W, pady=4) 
    Button(master, text='Show', command=gui.show_entry_fields(release_version=e1.get())).grid(row=3, column=1, sticky=W, pady=4) 

    mainloop() 

回答

0

我會說你需要chnage:

Button(master, text='Show', command=gui.show_entry_fields(release_version=release_version)).grid(row=3, column=1, sticky=W, pady=4) 

要:

Button(master, text='Show', command=lambda:gui.show_entry_fields(release_version=release_version)).grid(row=3, column=1, sticky=W, pady=4) 

拉姆達基本上可以讓你傳遞參數而不是調用它。讓我知道這是否有幫助。

+0

感謝它的工作! – Brunisboy