2013-11-21 88 views
2

我真的迷路了......我打开一个带有两个按钮的窗口,当你点击名为“REGISTER SOME KEY PRESSES”的按钮时,它会运行名为registerSomeKeyPresses.py的脚本,一旦完成,我会关闭该执行的BUUUUT但保持第一窗口中显示...它是不可能的,我....关闭一个窗口并在另一个窗口继续执行?

请,我会reaaaally得到任何帮助......

谢谢!

#!/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 ======================== ===

Do several things and last command: 

io.quit() 

回答

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 ===========================

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

的其他错误是:

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

如果你真的neeed一个线程。 千万不要将tkinter主循环与线程混合。线程可以使用event_generate - 这是安全的。

+0

嗨! 感谢您的反馈,事情是,我清楚地知道我想做什么,但我不知道如何实施它,这就是为什么我可能会滥用线程/ tkinter ... 我想做的事情: 1)用按钮显示一个窗口。每次你点击一个按钮,一个外部.py调用完成 2)外部.py执行显示所有的屏幕。 3)一旦.py完成后,我想回到窗口的按钮。 --- Step3我不知道该怎么办--- 谢谢! – MaRie

+0

你可以改进你的问题。这也会帮助其他人。 – User

0

当你销毁Tk的实例时,你的程序将会(也应该)退出。如果要创建和销毁窗口,请在保持主窗口处于活动状态的情况下创建并销毁实例Toplevel。如果你不想看到主窗口,你可以隐藏它。

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

+0

这是在这里讨论:https://mail.python.org/pipermail/tkinter-discuss/2013-November/thread.html – User

+0

嗨! 它似乎与Tk和Toplevel的一个实例我可以做到这一点,对吧? 3)一次。py完成我想用按钮返回窗口。 --- Step3我不知道该怎么做--- 我试过这样做,但我会再试一次。 谢谢! – MaRie

+0

@Marie:你必须只有一个Tk实例,在你准备好退出程序之前,你不应该销毁它。一旦你有了,如果你想让窗口出现和消失,使用Toplevel的实例。 –

相关问题