2012-08-29 2 views
0

나는 프로세스를 시작하는 버튼이있는 tkinter GUI를 가지고 있습니다. 이 프로세스 중에 if 문이 있으며,이 문이 참이면 프로세스가 종료됩니다. 프로세스가 끝나면 GUI를 열어두고 오류를 표시하지 않기를 바란다. os._exit()를 시도했지만 gui도 닫습니다.오류없이 끝 파이썬 코드를 엽니 다.

from Tkinter import * 
import tkMessageBox 
def Program(): 
#Process 
#Process 
    if #something happens#: 
     #Stop process but keep gui open and dont show errors 
root = Tk() 
root.title("GUI") 
root.geometry('450x300+200+200') 
labelText=StringVar() 
labelText.set("Program") 
label1=Label(root,textvariable=labelText,height=4) 
label1.pack() 
mbutton=Button(text='Start Program',command=Model).pack() 
root.mainloop() 
+1

다른 프로세스가 작동하지 않는 'return'함수입니까? –

답변

0

주 스레드에서 GUI를 실행하고 백그라운드 스레드에서 독립적으로 종료해야하는 부분을 넣을 수 있습니다.

import threading 

def bgthread(gui_ready, result_queue): 
    gui_ready.wait() 
    while True: 
     try: 
      # do some work ... 
      result_queue.put(result) # GUI gets results e.g., 
            # via q.get_nowait() in a 
            # widget.after() callback 
      if something_happened(): 
       break # exit 
     except: #NOTE: don't use bare except unless it is absolutely necessary 
      logger.error() # log to file 
      break # exit 

# setup logging   
# ... 
ready = threading.Event() 
q = Queue.Queue() 
threading.Thread(target=bgthread, args=(ready,q)).start() 

# setup gui here 
... 
root.mainloop() # call ready.set() in some GUI code then it is ready 
0

파이썬 코드가 반환을 사용 geo_pythoncl 제안을 사용했다 : 예컨대 역 추적을 억제하는 스레드를 제외하고/시도를 추가합니다.

from Tkinter import * 
import tkMessageBox 
def Program(): 
#Process 
#Process  
if #something happens#:   
#Stop process but keep gui open and dont show errors 
return 
root = Tk() 
root.title("GUI") 
root.geometry('450x300+200+200') 
labelText=StringVar() 
labelText.set("Program") 
label1=Label(root,textvariable=labelText,height=4) 
label1.pack() 
mbutton=Button(text='Start Program',command=Model).pack() 
root.mainloop()