[英]How to empty out Listbox in PySimpleGUI
我是 PySimpleGUI 的新手,但事實證明它真的像宣傳的那樣簡單。 僅僅幾個小時后,我已經有了一個半途而廢的應用程序。
我正在使用列表框來顯示從磁盤文件中讀取的多行項目。 當我單擊“顯示連接”按鈕時,它會讀取文件並顯示我想要的項目。 但是如果我再次單擊該按鈕,它會再次讀取文件,現在我在框中有兩個副本。 我想在它從下一個讀取的磁盤文件更新之前清空列表框,以便它始終准確顯示文件中的內容。 我已經嘗試過Update和set_value但似乎無法得到任何工作。
layout_showdata = [
[
sg.Text('Time',size=(10,1)),
sg.Text('Destination',size=(14,1)),
sg.Text('Source',size=(14,1))],
[sg.Listbox(size=(38,10),values=[''],key='_display_')]
]
. . .
if event == 'Show Connections':
print('Show Connections')
window['panel_show'].update(visible=True)
window['panel_edit'].update(visible=False)
window['panel_entry'].update(visible=False)
window['_display_'].set_value([]) ***#<==This should do it I thought***
with open('connections.txt','r') as cfile:
schedule=csv.reader(cfile,dialect="pipes")
for row in schedule:
items.append(row[0]+':'+row[1]+':'+row[2]+' '+row[3]+' '+row[4])
print(items[itemnum])
itemnum+=1
window.FindElement('_display_').Update(items)
我確定我錯過了一些簡單的東西,並且會很感激我能得到的任何幫助。
[編輯] 添加了一些運行代碼來說明會發生什么。 當按下按鈕時,它不會清除列表框,它只是再次讀取文件並添加到已經存在的內容中:
import PySimpleGUI as sg
import csv
items = []
itemnum = 0
csv.register_dialect('pipes', delimiter='|')
file = [
'01|23|45|12345678|87654321',
'04|35|23|24680864|08642468',
'01|23|45|12345678|87654321',
'04|35|23|24680864|08642468',
'01|23|45|12345678|87654321',
'23|23|23|12341234|43214321'
]
layout_showdata = [
[
sg.Text('Time',size=(10,1)),
sg.Text('Destination',size=(14,1)),
sg.Text('Source',size=(14,1))],
[sg.Listbox(size=(38,10),values=[''],key='_display_')],
[sg.Button('Show Connections')]
]
window = sg.Window('XY Scheduler', layout_showdata)
while True:
event, values = window.Read(timeout=1)
if event in (None, 'Quit'):
break
#Show Existing Connections
if event == 'Show Connections':
print('Show Connections')
window['_display_'].update([])
schedule=csv.reader(file,dialect="pipes")
for row in schedule:
items.append(row[0]+':'+row[1]+':'+row[2]+' '+row[3]+' '+row[4])
print(items[itemnum])
itemnum+=1
window.FindElement('_display_').Update(items)
如果要更改值,則需要更新方法。 你會發現它有一個 values 參數。 調用參考文檔或文檔字符串會對您有很大幫助,但使用的一般經驗法則是update
是更改元素某些內容的方法。
您已經為其他元素調用了它。 您只需要為列表框調用它。
window['_display_'].update([])
set_values 調用在文檔中有這樣的描述:“設置列表框突出顯示的選擇”
它設置已選擇的內容,而不是您必須選擇的選項。
[編輯] 這是如何刪除列表框中所有條目的完整示例。 也許我誤解了這個問題。
import PySimpleGUI as sg
def main():
layout = [ [sg.Text('My Window')],
[sg.Listbox([1,2,3,4,5], size=(5,3), k='-LB-')],
[sg.Button('Go'), sg.Button('Exit')] ]
window = sg.Window('Window Title', layout)
while True: # Event Loop
event, values = window.read()
print(event, values)
if event == sg.WIN_CLOSED or event == 'Exit':
break
if event == 'Go':
window['-LB-'].update([])
window.close()
if __name__ == '__main__':
main()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.