如何解决PySimpleGui:如何将值从一个列表框添加到另一个
所以我一直在寻找这个问题的答案已经有一段时间了。抱歉,如果我只是在这里忽略了一些东西。
我想创建两个列表框,您可以在其中将值从一个列表框移动到另一个列表框,从而为这些值创建您自己的顺序。这是因为我正在尝试为 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",key="-BUTTON-"),sg.ListBox(values=[],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()
解决方法
谢谢 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",key="-BUTTON-"),sg.Button("Remove",key="-BUTTON2-"),sg.Listbox(values=list2,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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。