首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python TKinter根据另一个下拉列表中的选择创建下拉列表。

Python TKinter根据另一个下拉列表中的选择创建下拉列表。
EN

Stack Overflow用户
提问于 2019-08-06 07:04:29
回答 1查看 1.1K关注 0票数 0

我需要复制一个类别从一个项目到另一个项目。为此,我创建了一个包含三个字段的简单GUI。对于项目,我目前有一个静态下拉列表。但是对于这些类别,我希望有一个下拉列表,根据上面选择的项目。不知何故,Tkinter不认识(或阅读)我的输入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#get project FROM which the information gets copied
Label(screen, text = "From project").grid(column=0, row=1, padx=10, pady=10)
proj_id=OptionMenu(screen, clicked_proj_from, '1001', '1002')
proj_id.grid(column=1, row=1)
project_from = clicked_proj_from.get()

#get project TO which the information gets copied
Label(screen, text = "To project").grid(column=0, row=2, padx=10, pady=10)proj_id=OptionMenu(screen, clicked_proj_to, '1001', '1002')
proj_id.grid(column=1, row=2)
project_to = clicked_proj_to.get() 

#get attribute category
clicked_attr=[]
attr=get_category(project_from)
for attribut in attr.items:
    clicked_attr.append(attribut.name)

variable.set(clicked_attr[0])

Label(screen, text = "Attribute_category").grid(column=0, row=3, padx=10, pady=10)
attr_cat = OptionMenu(screen, variable, *clicked_attr)
attr_cat.grid(column=1, row=3)
category = variable.get()

screen.mainloop()

我写的是1001,而不仅仅是project_from

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
attr=get_category(project_from), 

代码可以工作,但否则我会得到一个值丢失的错误。

我怎样才能改变这个密码?

提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2019-08-07 00:58:32

这是因为您在启动project_from = clicked_proj_from.get()“来自选项菜单的项目”之后立即执行了project_from应该是None,因为目前没有选择任何选项。

您应该在分配给选项command的回调函数中这样做。下面是您的代码的更新版本,作为示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# function will be executed when project from is changed
def on_project_change(project_from):
    attr = get_category(project_from)
    menu = attr_cat['menu']
    # clear the optionmenu
    menu.delete(0, 'end')
    # add new attribute to optionmenu
    for attribute in attr.items:
        menu.add_command(label=attribute.name, command=lambda val=attribute.name: variable.set(val))
    # reset optionmenu selection
    variable.set('')

screen = Tk()

clicked_proj_from = StringVar()
clicked_proj_to = StringVar()
variable = StringVar()

projects = ('1001', '1002')

Label(screen, text='From project').grid(row=1, column=0, padx=10, pady=10)
OptionMenu(screen, clicked_proj_from, *projects, command=on_project_change).grid(row=1, column=1)

Label(screen, text='To project').grid(row=2, column=0, padx=10, pady=10)
OptionMenu(screen, clicked_proj_to, *projects).grid(row=2, column=1)

Label(screen, text='Attribute categories').grid(row=3, column=0, padx=10, pady=10)
attr_cat = OptionMenu(screen, variable, None)
attr_cat.grid(row=3, column=1)

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

https://stackoverflow.com/questions/57378977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文