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:如何将值从一个列表框添加到另一个列表框的主要内容,如果未能解决你的问题,请参考以下文章