我正在寫一個Tkinter GUI的應用程序,其中包括我想要鍵盤訪問的長列表框。Tkinter Listbox以藍色突出顯示一個元素,但將黑色邊框放在另一個元素旁邊?
滾動一個項目,在使用箭頭鍵時是乏味的,所以我想,讓用戶在列表中更快速地移動,通過打字了元素的名稱,並且也使向上翻頁,page down,主頁和結束工作。
問題是,當我使用Listbox
的select_set()
方法時,它看起來並沒有完全相同的事情,點擊一個項目或使用箭頭鍵移動。
當我按下箭頭鍵或單擊選擇一個項目時,它會同時以藍色突出顯示該項目,並在其周圍放置一個黑色邊框。
當我只使用select_set()
方法時,它只將藍色突出顯示移動到所需的項目。黑色邊框留在原來的位置。
這會導致問題,因爲如果隨後按下上/下箭頭鍵移動我的選擇,它將選擇具有黑色邊框的項目上方/下方的項目,而不是選中突出顯示的項目藍色。
我的問題是,除了藍色突出顯示之外,如何將黑色邊框移動到正確的項目?
下面是截圖,顯示藍色的亮點,黑色的邊框不同步:
下面是一些最起碼的代碼重新產生問題。我刪除了實施結束,向上翻頁,並向下翻頁,但你仍然可以通過選擇比第一個用鼠標,然後按家其他任何元素看到的問題。
from Tkinter import END, Listbox, Tk
top = Tk()
listbox = Listbox(top)
listbox.grid(row = 0, column = 0)
for item in ['First', 'Second', 'Third', 'Last']:
listbox.insert(END, item)
def onKey(e):
if e.keysym == 'Home':
listbox.select_clear(0, END)
listbox.select_set(0)
listbox.bind('<Key>', onKey)
top.mainloop()
即將發佈 - 你擊敗了我2分鐘。 :) – TigerhawkT3
選擇和激活(在使用鍵盤導航時正式指向的內容)是完全獨立的,這對於實現一些選擇模式(特別是「擴展」模式)是必需的。通常這留給Tk中的低級控制器代碼;你幾乎不用在你自己的代碼中關心這些細節。 –
太好了,謝謝!實際上,我在文檔中看到了這種方法,但是他們對「激活」元素的描述是加下劃線的,而不是一個被黑盒包圍的元素,所以我沒有想到要嘗試它。他們也懶得描述爲什麼「激活」元素很重要。你碰巧有比這更好的文檔:http://effbot.org/tkinterbook/listbox.htm? – ArtOfWarfare