我正在學習 Tkinter,只是有一個疑問。
是否有任何方法可以阻止我在關閉主視窗之前在后臺處理視窗?我看到這里有一個關于這個的爭論,但我最終失去了它,決定問一下。
uj5u.com熱心網友回復:
是的,這是可能的(IIUC),如果我理解正確,您只是想在您的視窗打開時阻止用戶訪問其他視窗。它有一個小缺陷,如果用戶進行大量的 alt-tabbing,他們可能會將鍵盤焦點放在其他某個視窗上,但只會集中在鍵盤上,一旦他們用滑鼠做任何事情,他們就應該回到主視窗。這可以使用一些模塊來處理,例如keyboard偵聽全域鍵盤輸入,但也可以使用 Windows API 來完成,但對于tkinter唯一/應該足夠有效的解決方案,您可以使用它:
import tkinter as tk
def check_focus():
if root.focus_get() is None:
root.focus_force()
root.after(100, check_focus)
def create_shield():
shield = tk.Toplevel(root)
shield.attributes('-topmost', True)
shield.attributes('-fullscreen', True)
shield.attributes('-alpha', 0.01)
shield.overrideredirect(True)
shield.bind('<FocusIn>', lambda _: root.focus_force())
root = tk.Tk()
root.attributes('-topmost', True)
create_shield()
check_focus()
root.mainloop()
首先是after檢查焦點以查看視窗是否有焦點的“回圈”,這可以防止嘗試使用 alt-tab 鍵離開的一些嘗試,但足夠的嘗試可能會導致某種超時并且視窗將失去焦點。
另一部分是一個“盾牌”,它只是另一個幾乎完全不可見的全屏視窗(在其他作業系統上,屬性名稱可能-splash不是-alpha),只是將其保持在頂部以幫助專注于主視窗。
或者只是讓視窗全屏和最頂層(同樣是鍵盤焦點在其他視窗上的問題,但現在用戶訪問其他視窗沒有任何問題,除非他們看不到他們正在輸入的內容),這需要實作一些按鈕來關閉視窗(目前可以通過 alt f4 或關閉計算機或通過運行終止行程而不查看您正在輸入的內容,也許還有我沒有想過的其他方式,但為了用戶方便,可能應該制作一個按鈕只會破壞視窗):
import tkinter as tk
root = tk.Tk()
root.attributes('-topmost', True)
root.attributes('-fullscreen', True)
root.mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/370482.html
