[英]How do I change the size of the Flet window on Windows or specify that it is not resizable?
[英]How do I change what the X button does on the Windows console window?
我在Python中有一個常規的控制台窗口(Windows 8.1),我想更改close / X按鈕的功能。 游戲結束時,需要進行一些清理工作,例如,我該如何覆蓋它呢?
您可以通過使用SetConsoleCtrlHandler指定指定用於Ctrl-C,Ctrl-Break,控制台退出和系統關閉事件的函數來攔截控制台關閉事件。 對於控制台退出事件,您不能阻止控制台被破壞,但是您可以攔截該事件並運行一些代碼。 例如:
import sys
import time
import win32api
forever = True
handled_ctrl_type = None
def handler(ctrl_type):
global forever, handled_ctrl_type
forever = False
handled_ctrl_type = ctrl_type
print("HANDLER")
return True
def main(args = None):
win32api.SetConsoleCtrlHandler(handler, True)
n = 0
while forever:
time.sleep(1)
print(n)
n = n + 1
print("exiting...", handled_ctrl_type)
return 0
if __name__ == '__main__':
sys.exit(main())
如果這是在控制台中運行(使用Python 3),並且您按了Ctrl-C,則應該得到以下內容:
c:\src>python python\setconsolectrl.py
0
HANDLER
1
exiting... 0
其中0是CTRL_C_EVENT的值。 對於控制台出口,我們應該在此處設置2,以便我們可以判斷生成了哪種事件。
如果您運行此程序並按紅色大X來關閉控制台,則可以看到控制台被銷毀時正在打印HANDLER。 您應該在文件中添加一些日志記錄,以確保真正調用了所有清理操作,但這看起來應該可以解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.