关闭一个窗口并继续执行另一个窗口?

时间:2013-11-21 08:51:26

标签: python multithreading tkinter

我真的迷路了...我打开一个带有两个按钮的窗口,当你点击名为“注册一些按键”的按钮时,它会运行名为registerSomeKeyPresses.py的脚本,BUUUUT一旦完成我想关闭那个执行,但保持第一个窗口显示......这对我来说是不可能的......

拜托,我真的很感激任何帮助...

谢谢!

#!/usr/bin/env python
from Tkinter import *
import threading

v0 = Tk()

def finishApplication(): v0.destroy()
def registerSomeKeyPresses(): 
t = threading.Thread(target=execfile("registerSomeKeyPresses.py"))

t.start()

def waitAndRun(f): v0.after(200, f)

b1=Button(v0,text="TERMINAR APLICACION",command=lambda: finishApplication()).pack()

button_keyPresses=Button(v0,text="REGISTER SOME KEY PRESSES",command=lambda:             waitAndRun(registerSomeKeyPresses())).pack()

v0.mainloop()

================ registerSomeKeyPresses.py =========================== < / p>

Do several things and last command: 

io.quit()

2 个答案:

答案 0 :(得分:0)

修改1

第二次尝试作为对您评论的回复:

from Tkinter import *
from subprocess import call
import sys

t = Tk()
def click():
    t.iconify()
    try:
        call([sys.executable, 'script.py'])
    finally:
        t.deiconify() # if it should close do t.quit() and t.destroy()
b = Button(t, command= click)
b.pack()

t.mainloop()

旧版

这是做什么的?

================ registerSomeKeyPresses.py =========================== < / p>

v0.quit()
v0.destroy()
io.mainloop()

另一个错误是:

threading.Thread(target=execfile, args = ("registerSomeKeyPresses.py",))

如果你真的需要一个线程。 永远不要将tkinter mainloop事物与线程混合在一起。线程可以使用event_generate - 这是安全的。

答案 1 :(得分:0)

当您销毁Tk的实例时,您的程序将(并且应该)退出。如果要创建和销毁窗口,请在保持主窗口活动的同时创建并销毁Toplevel的实例。如果您不想看到主窗口,可以隐藏它。

此外,tkinter和线程不能很好地混合。您无法从另一个线程调用任何窗口小部件上的任何方法。我听说其他人说你可以从另一个线程调用event_generate,但我认为这是你可以从另一个线程调用的唯一的 tkinter函数。