0

プロセスを開始するボタンを持つ tkinter gui があります。このプロセス中に if ステートメントがあり、このステートメントが true の場合、プロセスは終了します。プロセスが終了したら、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()
4

2 に答える 2

0

GUIをメインスレッドで実行し、独立して終了する必要のある部分をバックグラウンドスレッドに配置することができます。スレッドにtry/exceptを追加して、トレースバックを抑制します。例:

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
于 2012-08-29T11:25:27.217 に答える
0

Python コードは、return を使用する 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()
于 2012-08-29T15:24:18.813 に答える