首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按字母顺序排列Tkinter选项菜单?

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

Stack Overflow用户
提问于 2018-01-11 03:48:59
回答 2查看 2K关注 0票数 1

我试图在Tkinter中制作一个按字母顺序列出数据的OptionMenu,但我不知道怎么做。

这是我的OptionMenu数据集的代码。(随着我开发该程序,这一功能将扩展)。

代码语言:javascript
复制
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代码。

代码语言:javascript
复制
var = tkinter.StringVar()
var.set('Advanced Mortars')
p = tkinter.OptionMenu(window, var, *data)
p.config(font='Helvetica 12 bold')
p.pack()

每次我运行代码并打开OptionMenu时,所有内容都会被随机置乱。我该怎么按字母顺序排序?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-11 04:10:37

因为data是一个集合,它是python中的一个无序集合,所以数据总是会被置乱。由于data看起来已经排序,解决这个问题的一个简单方法是将data更改为list,这是一个有序的集合:

代码语言:javascript
复制
data=[
     'Actually Additions Atomic Reconstructor',
     'Advanced Mortars',
     ...
     ]

如果您的数据必须是一个集合,您也可以预先使用sorted()对其进行排序。

代码语言:javascript
复制
data = sorted(data)

当我运行以下代码时,您的代码运行良好:

代码语言:javascript
复制
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()
票数 2
EN

Stack Overflow用户

发布于 2018-01-11 04:16:19

幸运的是,这个解决方案相当简单和直观。在传递参数时,只需添加一个已排序():

代码语言:javascript
复制
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()就不能工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48199486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档