PySimpleGui:如何将值从一个列表框添加到另一个列表框

Posted

技术标签:

【中文标题】PySimpleGui:如何将值从一个列表框添加到另一个列表框【英文标题】:PySimpleGui: How to add values from one listbox to another 【发布时间】:2021-06-07 04:28:10 【问题描述】:

所以我一直在寻找这个问题的答案很长一段时间。抱歉,如果我在这里忽略了一些东西。

我想创建两个列表框,您可以在其中将值从一个列表框移动到另一个列表框,为这些值创建您自己的顺序。这是因为我正在尝试为 API 制作 GUI,值的顺序将最终决定维度/指标标题的顺序,这非常重要。

这是我尝试采用的方法来实现这一点,但是,每次按下“添加”按钮时,TEST 对象似乎都会覆盖其列表,而我希望它追加:

import PySimpleGUI as sg

list1 = ["a", "b", "c"]


layout = [[sg.Text("Demo")],      
                 [sg.Listbox(values=list1, size=(30,6), enable_events=True, key="-LIST-"), sg.Button("Add", enable_events=True, key="-BUTTON-"), sg.Listbox(values=[], size=(30,6), key="-LIST2-")], 
                 [sg.Cancel("Exit")]]  

window = sg.Window("Beta", layout=layout, background_color="#272533", size=(650, 450))

while True:
    event, values = window.read()
    if event == "Exit" or event == sg.WIN_CLOSED:
        break
    
    if event == "-BUTTON-":
        TEST = []
        TEST.append(values["-LIST-"])
        window["-LIST2-"].update(TEST)
        print(TEST)

window.close()

【问题讨论】:

values['-LIST-'] 返回所选项目的值列表。在这里,最好使用get_indexes() 来获取所选项目的索引。如果要移动,则按索引删除list1的项目,并按索引将项目插入list2,更新sg.List。请记住在对某项进行操作之前检查是否选择了任何项。 嗨,Jason,谢谢你,这真的很有帮助! 【参考方案1】:

谢谢 Jason,我设法设置了两个列表框,以便您可以将项目从一个框移动到另一个框,从而使用 get_indexes() 创建任何您想要的项目顺序。

基本上我从一个空列表开始,然后使用get_indexes() 查找用户在初始列表中确定的值的索引。然后我使用 pop 函数将该值附加到空列表中,以便将其从初始列表中删除。然后我必须更新两个窗口,以便在用户移动下一个值时更新索引。

这是我用来让它工作的代码。它可能不是最漂亮或最有效的(我对 python 很陌生),但它确实有效!如果有任何关于如何使其更简洁的建议,我们将不胜感激!

import PySimpleGUI as sg

list1 = ['a', 'b', 'c']
list2 = []


layout = [[sg.Text("Demo")],      
                 [sg.Listbox(values=list1, size=(30,6), enable_events=True, key="-LIST-"), sg.Button("Add", enable_events=True, key="-BUTTON-"), sg.Button("Remove", enable_events=True, key="-BUTTON2-"), sg.Listbox(values=list2, size=(30,6), key="-LIST2-")], 
                 [sg.Cancel("Exit")]]  

window = sg.Window("Beta", layout=layout, background_color="#272533", size=(650, 450))

while True:
    event, values = window.read()
    if event == "Exit" or event == sg.WIN_CLOSED:
        break
    
    if event == "-BUTTON-":
        INDEX = int(''.join(map(str, window["-LIST-"].get_indexes())))
        list2.append(list1.pop(INDEX))
        window["-LIST2-"].update(list2)
        window["-LIST-"].update(list1)

    if event == "-BUTTON2-":
        INDEX = int(''.join(map(str, window["-LIST2-"].get_indexes())))
        list1.append(list2.pop(INDEX))
        window["-LIST2-"].update(list2)
        window["-LIST-"].update(list1)

window.close()

【讨论】:

以上是关于PySimpleGui:如何将值从一个列表框添加到另一个列表框的主要内容,如果未能解决你的问题,请参考以下文章

将值从表单传递到表单

如何将值从基本适配器传递到 Android 中的 Activity

将值从ListBox复制到工作表单元格

如何将值从动态列表视图传递到活动?

如何将值从一个活动传递到上一个活动

如何将值从列表视图传递到 detalis Activity