[英]Unselect item on pysimplegui listbox re-click
我最近開始在一個基本的 GUI 應用程序上使用 pysimplegui。 我的 window 有一個 ListBox 初始化如下:
sg.Listbox(values=[], select_mode="extended", key="list_box", size=(40, 25), enable_events=True)
它工作得很好,一切都很好,但是在我 select 列表中的一個項目之后,我無法取消選擇它。 我試圖清除這樣的選擇
window["list_box"].update(set_to_index=[])
它工作正常,但對我來說感覺不對,因為我必須為每個ListBox
保留一個 state 關於最后選擇的項目,以了解何時進行新選擇或只是重新選擇前一個項目。
底線,我想在兩次單擊同一項目時清除ListBox
的選擇。
希望我清楚,謝謝
在擴展模式下,按住 Control 鍵的同時按下按鈕 1 可啟動切換操作。
無論如何,你可以這樣做
import PySimpleGUI as sg
data = [f'Item {i+1:0>2d}' for i in range(10)]
layout = [
[sg.Listbox(
values=data,
select_mode=sg.LISTBOX_SELECT_MODE_EXTENDED,
size=(20, 5),
enable_events=True,
key="-LISTBOX-",
metadata=[],
)],
]
window = sg.Window('Listbox', layout, finalize=True)
listbox = window["-LISTBOX-"]
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED:
break
print(event, values)
if event == "-LISTBOX-":
metadata = listbox.metadata
selections = values["-LISTBOX-"]
print(metadata, selections)
if metadata == selections:
listbox.update(set_to_index=[])
listbox.metadata = []
else:
listbox.metadata = values["-LISTBOX-"]
window.close()
注意:有一個問題,你不能快速點擊同一個項目到 select 它,否則下次點擊不會產生任何事件。 這不是 PySimpleGUI 或您的代碼的問題,可能默認為Tk
,它會自動為列表框創建 class 綁定,從而賦予它們類似 Motif 的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.