簡體   English   中英

在 Tkinter 中,如何從小部件中移除焦點?

[英]In Tkinter how do i remove focus from a widget?

我想手動從小部件中移除焦點。

您可以專注於另一個虛擬小部件。

編輯

from Tkinter import *

def callback():
    print master.focus()

master = Tk()
e = Entry(master)
e.pack()
e.focus()
b = Button(master, text="get", width=10, command=callback)
b.pack()

master.mainloop()

專注於非“可聚焦”的小部件將移除另一個小部件的焦點。

  • 將焦點設置到另一個小部件以從目標小部件中移除焦點是一個好主意。 有兩種方法: w.focus_set()w.focus_force() 但是,方法w.focus_force()是不禮貌的。 最好等待窗口管理器給你焦點。 將焦點設置到父窗口小部件或根窗口會從目標窗口小部件中移除焦點。
  • 一些小部件有takefocus選項。 將 takefocus 設置為 0 以使您的小部件脫離焦點遍歷(當用戶點擊<Tab>鍵時)。

如果虛擬小部件是Canvasc.focus()將不起作用。

使用c.focus_set()c.tk.call('focus',c)首先關注畫布窗口本身。


那是因為

c.focus()

... 返回當前具有焦點的項目的 id,如果沒有項目具有焦點,則返回空字符串。 參考

c.focus(id_)將集中於具有項目ID id_畫布內。

c.focus("")將從畫布中的任何項目移除焦點。


因此(在一些回調中)

c.config(highlightthickness = 0) # to remove the highlight border on focus
c.foucs_set()
c.focus("") # just to be sure

c.focus()函數不同的原因是在 Tcl/Tk 的命令中有“主要”命令focus

以及 Canvas 特定的小部件命令focus

這在 Tcl/Tk 語法中不是問題,但在c.focus()模塊中c.focus()將調用底層畫布特定的foucs

來自Canvas類 Line 2549 中的tkinter.py

def focus(self, *args):
        """Set focus to the first item specified in ARGS."""
        return self.tk.call((self._w, 'focus') + args)

我的解決方案是root.focus()它將刪除小部件焦點。

如果您使用 ttk 小部件,您可以通過移除顏色來“移除”聚焦環; 例如在按鈕上:

style = ttk.Style()
style.configure('TButton', focuscolor='')

所以這個問題在這里可能是重復的,但@Bryan Oakley 的答案在 Python 3.8 中對我來說非常適合

root.focus_set()

太容易了...

暫無
暫無

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

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