Skip to main content
 首页 » 编程设计

Python、Tk 和 OptionMenu : how to sort a drop down list

2025年05月04日31飞鱼

我想用 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), 。 ..])