无错误地结束python代码保持Gui打开

2024-04-25 19:15:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个tkinter gui,它有一个启动进程的按钮。在这个过程中有一个if语句,如果这个语句是真的,那么这个过程就结束了。当进程结束时,我希望GUI保持打开状态,而不是显示错误。我试过os.\u 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()

Tags: importif进程tkinter过程guiroot语句
2条回答

Python代码使用geo-pythoncl建议使用return。在

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()

您可以在主线程中运行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

相关问题 更多 >