簡體   English   中英

KeyboardInterrupt需要一段時間

[英]KeyboardInterrupt taking a while

所以我剛開始使用Tkinter在Linux上亂搞Python。 我試圖通過使用KeyboardInterrupt異常使Cntrl + C停止執行,但是當我按下它時,暫時沒有任何反應。 最終它“需要”並退出。 一點點閱讀表明這可能與線程或其他東西有關,但我對這些東西很新,我真的不知道從哪里開始。

#! /usr/bin/python
import sys
from Tkinter import *

try: 
    root = Tk()
    root.mainloop()
except:
    print "you pressed control c"
    sys.exit(0)

我不想成為只需要快速修復的菜鳥,所以如果你的答案就像指向正確的文檔一樣簡單,那就太棒了。

這有點問題,因為在一般情況下,在調用mainloop方法之后,您依靠Tcl來處理事件。 由於您的應用程序什么都不做,因此Tcl沒有理由對任何事情作出反應,盡管它最終會處理其他事件(正如您所注意到的,這可能需要一些時間)。 避免這種情況的一種方法是讓Tcl / Tk做一些事情,安排人工事件,如:

from Tkinter import Tk

def check():
    root.after(50, check) # 50 stands for 50 ms.

root = Tk()
root.after(50, check)
root.mainloop()

根據Guido van Rossum的說法 ,這是因為你被困在Tcl / Tk主循環中,而信號處理程序只能由Python解釋器處理。

您可以通過將Ctrl-c綁定到回調函數來解決此問題:

import sys
import Tkinter as tk

def quit(event):
    print "you pressed control c"
    root.quit()

root = tk.Tk()
root.bind('<Control-c>', quit)
root.mainloop()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM