Python 如何在PySimpleGUI中清空列表框

Python 如何在PySimpleGUI中清空列表框,python,listbox,pysimplegui,Python,Listbox,Pysimplegui,我是PySimpleGUI的新用户,但正如广告所宣传的那样,它真的很简单。仅仅几个小时后,我就有了一份半途而废的申请 我使用一个列表框来显示从磁盘文件读入的几行项目。当我单击“显示连接”按钮时,它会读取文件并显示我想要的项目。但是,如果我再次单击按钮,它会再次读取文件,现在我在框中有两份副本。我想在下一次读取磁盘文件时更新列表框之前清空它,以便它始终准确地显示文件中的内容。我尝试过更新和设置_值,但似乎无法使任何东西正常工作 layout_showdata = [ [ sg.Te

我是PySimpleGUI的新用户,但正如广告所宣传的那样,它真的很简单。仅仅几个小时后,我就有了一份半途而废的申请

我使用一个列表框来显示从磁盘文件读入的几行项目。当我单击“显示连接”按钮时,它会读取文件并显示我想要的项目。但是,如果我再次单击按钮,它会再次读取文件,现在我在框中有两份副本。我想在下一次读取磁盘文件时更新列表框之前清空它,以便它始终准确地显示文件中的内容。我尝试过更新和设置_值,但似乎无法使任何东西正常工作

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_')]
]
。 .


如果要更改值,则需要更新方法。您会发现它有一个values参数。调用参考文档或docstrings将对您有很大帮助,但一般的经验法则是,update是一种更改元素的方法

您已经为其他元素调用了它。你只需要为列表框调用它

窗口[''显示].更新[] set_values调用在文档中有以下描述: 设置列表框突出显示的选项

它设置已选择的内容,而不是必须选择的选项

[编辑] 下面是如何删除列表框中所有条目的完整示例。也许我误解了这个问题

将PySimpleGUI导入为sg def主: 布局=[[sg.Text'My Window'], [sg.Listbox[1,2,3,4,5],size=5,3,k='-LB-'], [sg.按钮“开始”,sg.按钮“退出”]] 窗口=sg。窗口“窗口标题”,布局 while True:事件循环 事件,值=window.read 打印事件、值 如果事件==sg.WIN\u关闭或事件==退出: 打破 如果事件=='Go': 窗口['-LB-']。更新[] 窗户关上 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': 主要的
在我发布了这个问题后,我意识到设置_值是错误的。但我已经尝试过使用更新,但它不起作用。只是再次尝试以确保其行为是相同的。它似乎忽略了更新,只是从文件中重新加载行,并将它们添加到列表框中已有的行中。在原始帖子中添加了一些代码以进行说明。谢谢@MikeyB和其他任何能提供帮助的人。打印您要传递给更新的内容,以确保您发送的是您认为的内容。为您添加了一个完整的示例。如果将[]更改为列表[4,5,6],您将看到列表框更改为这些值。我不认为这是PySimpleGUI问题。请查看代码中的逻辑。对事件循环中的项执行的唯一操作是items.append。listbox将新内容添加到listbox中的原因是因为代码正在这样做。这不是PySimpleGUI的问题。。。这是代码中的逻辑问题。打印要传递给update方法的项目,您将看到传递的是错误信息。是的,就是这样。我知道这是件愚蠢的事。我过分关注PySimpleGUI的问题,错过了我自己的错误。谢谢要不要把答案标记为正确,让下一个人看到?
    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)