繁体   English   中英

按字母顺序排序Tkinter选项菜单?

[英]Sort a Tkinter optionmenu alphabetically?

我正在尝试在Tkinter中创建一个按字母顺序列出数据的OptionMenu,但我不知道如何。

这是我的OptionMenu数据集的代码。 (这将在我开发程序时扩展)。

data={
'Actually Additions Atomic Reconstructor',
'Advanced Mortars',
'Artisan Worktables',
'Extra Utilities Crusher',
'Extra Utilities Resonator',
'Initial Inventory',
'JEI Hide',
'JEI RemoveAndHide',
'Ore Dictionary Add',
'Ore Dictionary Create',
'Ore Dictionary Remove',
'Seed Drops'
}

这是我的OptionMenu代码。

var = tkinter.StringVar()
var.set('Advanced Mortars')
p = tkinter.OptionMenu(window, var, *data)
p.config(font='Helvetica 12 bold')
p.pack()

每次我运行代码并打开OptionMenu时,一切都会随机乱码。 我该如何按字母顺序排序?

由于data是一个集合,它是python中的无序集合,因此数据将始终被加扰。 由于data已经看起来已经排序,因此解决此问题的一种简单方法是将data更改为列表,这是一个有序集合:

data=[
     'Actually Additions Atomic Reconstructor',
     'Advanced Mortars',
     ...
     ]

如果您的数据必须是一个开头的集合,您也可以事先使用sorted()对其进行sorted()

data = sorted(data)

运行此代码时,您的代码运行正常:

from tkinter import *

data={
      'Actually Additions Atomic Reconstructor',
      'Advanced Mortars',
      'Artisan Worktables',
      'Extra Utilities Crusher',
      'Extra Utilities Resonator',
      'Initial Inventory',
      'JEI Hide',
      'JEI RemoveAndHide',
      'Ore Dictionary Add',
      'Ore Dictionary Create',
      'Ore Dictionary Remove',
      'Seed Drops'
     }

data = sorted(data)

master = Tk()

var = StringVar(master)
var.set('Advanced Mortars')
p = OptionMenu(master, var, *data)
p.config(font='Helvetica 12 bold')
p.pack()

值得庆幸的是,这个解决方案相当简单直观。 您所要做的就是在传递参数时添加sorted():

var = tkinter.StringVar()
var.set('Advanced Mortars')
p = tkinter.OptionMenu(window, var, *sorted(data))
p.config(font='Helvetica 12 bold')
p.pack()

只需确保将sorted()放在* splat运算符中,因为sorted()需要应用于列表(如数据变量),但是对于sorted(*data)它实际上将*data视为一堆单独的变量,这样sorted()将无法正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM