2013-11-21 123 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的實例。 –

相關問題