Python 将StringVar值转换为列表
我一直在做一个Tkinter项目。我已经将列表框设置为StringVar,我想通过设置函数Python 将StringVar值转换为列表,python,string,list,tkinter,tuples,Python,String,List,Tkinter,Tuples,我一直在做一个Tkinter项目。我已经将列表框设置为StringVar,我想通过设置函数“进程”来调用右侧列表框中的项目列表 在gui中按下按钮进程后,在上述情况下,我应该返回一个列表['a']。 但是,它返回['(',“','A',“',”)'] 如果我只是打印app.list\u var2.get()它返回('A',) 将tkinter作为tk导入 作为pd进口熊猫 app=tk.tk() 应用几何(“640x480”) 应用程序可调整大小(宽度=真,高度=真) 应用程序标题(“模拟器”
“进程”
来调用右侧列表框中的项目列表
在gui中按下按钮进程后,在上述情况下,我应该返回一个列表['a']
。
但是,它返回['(',“','A',“',”)']
如果我只是打印app.list\u var2.get()
它返回('A',)
将tkinter作为tk导入
作为pd进口熊猫
app=tk.tk()
应用几何(“640x480”)
应用程序可调整大小(宽度=真,高度=真)
应用程序标题(“模拟器”)
#列出变量
app.list_var1=tk.StringVar()
app.list_var2=tk.StringVar()
app.list_var1.set(值=['A'、'B'、'C'])
app.list_var2.set(值=[])
#标签架
app.label\u frame=tk.frame(app)
app.label1=tk.Label(app.Label\u框架,text='PDC',justify='left')
app.label1.pack(ipadx=10,ipady=10,side='left',anchor='w')
app.label2=tk.Label(app.Label\u框架,text='SDC')
app.label2.pack(ipadx=20,ipady=10,side='left',anchor='e')
#主机架
app.main_frame=tk.frame(app)
app.listbox1=tk.Listbox(app.main\u frame,listvariable=app.list\u var1,selectmode='single')
app.listbox2=tk.Listbox(app.main\u frame,listvariable=app.list\u var2,selectmode='single')
def init_默认值():
app.list_var1.set(值=['A'、'B'、'C'])
app.list_var2.set(值=[])
def向右移动(只有一项=False):
如果app.listbox1.curselection()==():
返回
#获取所选索引的元组
如果只有一个项目:
选择=(app.listbox1.curselection()[0],)
其他:
selection=app.listbox1.curselection()
#保留所有/选定值
左\u值\u列表=[line.strip('\'')用于app.list\u var1.get()[1:-1]。拆分(',')]
left_selected_list=[left_value_list[index]用于选择中的索引]
#来自右侧的值
右\u值\u列表=[line.strip('\'')用于app.list\u var2.get()[1:-1]。拆分(',')]
#合并,不包含重复项
结果列表=已排序(列表(设置(右值列表+左选定列表)))
对于左值列表中的x:
如果结果列表中有x:
左值列表。删除(x)
而左值列表中的(“):
左值列表。删除(“”)
而结果列表中的(“):
结果列表。删除(“”)
app.list\u var2.set(值=结果\u列表)
app.list\u var1.set(value=left\u value\u list)
def向左移动(只有一项=False):
如果app.listbox2.curselection()==():
返回
#获取所选索引的元组
如果只有一个项目:
选择=(app.listbox2.curselection()[0],)
其他:
selection=app.listbox2.curselection()
#右键单击所有/选定的值
右\u值\u列表=[line.strip('\'')用于app.list\u var2.get()[1:-1]。拆分(',')]
右键选中的\u列表=[右键选中的索引的值\u列表[索引]
#来自左侧的值
左\u值\u列表=[line.strip('\'')用于app.list\u var1.get()[1:-1]。拆分(',')]
#合并,不包含重复项
结果列表=已排序(列表(设置(左值列表+右选定列表)))
对于右值列表中的x:
如果结果列表中有x:
右值列表。删除(x)
而右值列表中的(“):
右键\u值\u列表。删除(“”)
而结果列表中的(“):
结果列表。删除(“”)
app.list\u var1.set(值=结果\u列表)
app.list\u var2.set(value=right\u value\u list)
def reset():
初始默认值()
def进程():
#如果len(app.list_var2.get())==1:
lst=app.list_var2.get()
打印(透镜(lst))
lst=str(app.list_var2.get()).replace(',','')
lst=列表(lst)
打印(类型(lst))
打印(透镜(lst))
打印(lst)
#小钮扣架
app.button\u frame=tk.frame(app.main\u frame)
app.one_to_right_button=tk.button(app.button_frame,text='>',command=lambda:move_to_right(True))
app.one_to_left_button=tk.button(app.button_frame,text=',因为app.list_var2
是一个StringVar
,所以app.list_var2.get()
将始终返回一个字符串
最好使用app.listbox2.get(0,“end”)
获取列表框中的所有项(一个元组):
def process():
lst = list(app.listbox2.get(0, 'end'))
print(lst, type(lst))
请注意,您可以使用eval()
将app.list\u var2.get()
返回的字符串转换为tuple
,但不建议:
def process():
lst = list(eval(app.list_var2.get()))
print(lst, type(lst))
第一种方法有效!非常感谢您的帮助!!
def process():
lst = list(eval(app.list_var2.get()))
print(lst, type(lst))