在 tkinter 的列表框中传播字典
Propagate a dict in a Listbox of tkinter
我在 tkinter 列表框小部件中列出了字典 {'337':'Anderson','47':'Stuttgart' ...}。那对我有用。使用 curselection(),我还可以通过双击来获取像“Anderson”这样的值。
我的函数如下所示:
def select_xml(event):
widget = event.widget
selection = widget.curselection()
value = widget.get(selection[0])
print (value)
这个打印例如安德森.
问题:我的字典的key是不是丢失了,或者如何找回我选择的值的key。我找不到任何关于 dict 和 Listbox 的信息。
我不知道你是如何创建的 Listbox
但你可以将列表转换为
{'Anderson': '337', 'Stuttgart':'47' ...}
然后使用 Anderson
作为键得到 337
。
data = {'337':'Anderson', '47':'Stuttgart'}
data2 = {val:key for key,val in data.items()}
print(data2)
print(data2['Anderson'])
如果您在 dict 中多次使用相同的名称,那么转换可能会删除一些值,然后使用 list/dict comprehension
更好地过滤原始 dict
keys = [key for key,val in data.items() if val == 'Anderson']
print(keys)
但是如果你多次使用相同的名字,那么你会得到很多钥匙,你将不知道选择哪一把。最好使用 (key,values) 创建列表,然后使用 selection[0]
作为此列表中的索引
data = {'337':'Anderson', '47':'Stuttgart'}
data2 = [(key, val) for key,val in data.items()]
selection = [0]
print( data2[ selection[0] ] )
最少的工作代码
import tkinter as tk
# --- functions ---
def on_click(event):
widget = event.widget
sel = widget.curselection()
val = widget.get(sel[0])
print('dict2:', dict2[val])
print('list2:', list2[sel[0]])
print('---')
# --- main ---
data = {'337': 'Anderson', '47': 'Stuttgart'}
dict2 = {val:key for key, val in data.items()}
list2 = list(data.items())
root = tk.Tk()
listbox = tk.Listbox(root)
listbox.pack()
listbox.insert('end', *data.values())
listbox.bind('<Double-Button-1>', on_click)
root.mainloop()
结果:
dict2: 47
list2: ('47', 'Stuttgart')
---
dict2: 337
list2: ('337', 'Anderson')
---
我在 tkinter 列表框小部件中列出了字典 {'337':'Anderson','47':'Stuttgart' ...}。那对我有用。使用 curselection(),我还可以通过双击来获取像“Anderson”这样的值。
我的函数如下所示:
def select_xml(event):
widget = event.widget
selection = widget.curselection()
value = widget.get(selection[0])
print (value)
这个打印例如安德森.
问题:我的字典的key是不是丢失了,或者如何找回我选择的值的key。我找不到任何关于 dict 和 Listbox 的信息。
我不知道你是如何创建的 Listbox
但你可以将列表转换为
{'Anderson': '337', 'Stuttgart':'47' ...}
然后使用 Anderson
作为键得到 337
。
data = {'337':'Anderson', '47':'Stuttgart'}
data2 = {val:key for key,val in data.items()}
print(data2)
print(data2['Anderson'])
如果您在 dict 中多次使用相同的名称,那么转换可能会删除一些值,然后使用 list/dict comprehension
更好地过滤原始 dictkeys = [key for key,val in data.items() if val == 'Anderson']
print(keys)
但是如果你多次使用相同的名字,那么你会得到很多钥匙,你将不知道选择哪一把。最好使用 (key,values) 创建列表,然后使用 selection[0]
作为此列表中的索引
data = {'337':'Anderson', '47':'Stuttgart'}
data2 = [(key, val) for key,val in data.items()]
selection = [0]
print( data2[ selection[0] ] )
最少的工作代码
import tkinter as tk
# --- functions ---
def on_click(event):
widget = event.widget
sel = widget.curselection()
val = widget.get(sel[0])
print('dict2:', dict2[val])
print('list2:', list2[sel[0]])
print('---')
# --- main ---
data = {'337': 'Anderson', '47': 'Stuttgart'}
dict2 = {val:key for key, val in data.items()}
list2 = list(data.items())
root = tk.Tk()
listbox = tk.Listbox(root)
listbox.pack()
listbox.insert('end', *data.values())
listbox.bind('<Double-Button-1>', on_click)
root.mainloop()
结果:
dict2: 47
list2: ('47', 'Stuttgart')
---
dict2: 337
list2: ('337', 'Anderson')
---