我试图在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时,所有内容都会被随机置乱。我该怎么按字母顺序排序?
发布于 2018-01-11 04:10:37
因为data是一个集合,它是python中的一个无序集合,所以数据总是会被置乱。由于data看起来已经排序,解决这个问题的一个简单方法是将data更改为list,这是一个有序的集合:
data=[
'Actually Additions Atomic Reconstructor',
'Advanced Mortars',
...
]如果您的数据必须是一个集合,您也可以预先使用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()发布于 2018-01-11 04:16:19
幸运的是,这个解决方案相当简单和直观。在传递参数时,只需添加一个已排序():
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()就不能工作。
https://stackoverflow.com/questions/48199486
复制相似问题