我想用 tk 和 OptionMenu 创建一个下拉列表。我想向用户显示一个字符串(“10 us”、“40 us”...)并返回一个数字(0、1、...),这是我发送给变量的参数。它运作良好,但未排序。我想像变量“lst1”一样对列表进行排序。
应该是:
- 10 我们
- 20 我们
- 40 我们
80 秒
lst1 = {"10 us": 0, "20 us": 1, "40 us": 2, "80 us": 3, "160 us": 4, "320 us": 5, "640 us": 6, "1.28 ms": 7, "2.56 ms": 8, "5.12 ms": 9, "10.24 ms": 10} var_tc = StringVar() var_tc.set("40 us") list_tc = OptionMenu(frame, var_tc, *lst1.keys()) list_tc.config(takefocus=1) list_tc.grid(row=10, column=1, padx=2, pady=10) param.tc = lst1[var_tc.get()]
你能帮帮我吗? :)
请您参考如下方法:
问题是您将字典用作列表,而字典没有任何顺序概念。有两种方法可以做到;两者都非常简单。
方式一:只使用排序键
你不需要改变太多,只是当你传入lst1.keys()时,你改为传入sorted(lst1.keys()),因为 keys() 返回一个列表,您可以给出其中一个排序的列表。
方式二:使用保持顺序的字典
collections 是 python 标准库之一,它包含许多用途各异的容器。其中之一是 OrderedDict,它是一个保持您输入内容顺序的字典。您可以将其导入为 from collections import OrderedDict,并将其初始化为任何其他对象 - lst1 = OrderedDict([("10us",0), ("20us",1), 。 ..])
