【问题标题】:Thread starts without button event Tkinter [duplicate]线程在没有按钮事件 Tkinter 的情况下启动 [重复]
【发布时间】:2016-09-06 08:57:48
【问题描述】:

我有以下一段代码,想在文本框中输入字符串后启动线程,但是一旦我运行程序,线程就开始执行,有什么想法吗?线程不应该在创建它的方法被执行时启动吗?

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()

【问题讨论】:

    标签: python multithreading events tkinter


    【解决方案1】:

    我会说你需要改变:

    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)
    

    lambda 基本上允许您在不调用函数的情况下传递参数。让我知道这是否有帮助。

    【讨论】:

    • 感谢成功!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2018-08-21
    • 2017-09-06
    • 2012-01-18
    • 2017-04-24
    • 2014-11-19
    • 1970-01-01
    相关资源
    最近更新 更多