首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tkinker选项菜单不显示所选结果

tkinker选项菜单不显示所选结果
EN

Stack Overflow用户
提问于 2017-07-21 19:33:17
回答 1查看 221关注 0票数 0
代码语言:javascript
复制
import tkinter

window = tkinter.Tk()

def abc(event):
     ans=0
    numberss=['7','8','9']
    omenu2['menu'].delete(0, 'end')
    for number in numberss:
        omenu2['menu'].add_command(label=numberss[ans], command=efg)
        ans=ans+1


def efg(event=None):
    print('yee')

numbers = ['1','2', '3']
number=['4','5','6']

var = tkinter.StringVar(window)
var1 = tkinter.StringVar(window)


omenu = tkinter.OptionMenu(window, var, *numbers, command = abc)
omenu.grid(row=1)
omenu2 = tkinter.OptionMenu(window, var1, *number, command = efg)
omenu2.grid(row=2)

进入第一个选项菜单后,它将更新第二个选项菜单。当您在第二个命令中输入数据时,它会运行该命令,但不会显示您输入的内容。我不想包含按钮,而且我知道该命令有效,但在第二个按钮上不起作用

我发现一些代码改变了第二个菜单的选项,但是当我运行它时,命令不能工作,因为它被更改为tkinter.setit (我也想知道它做了什么。我目前还不理解它)

代码语言:javascript
复制
omenu2['menu'].add_command(label=numberss[ans], command=tkinter._setit(var1, number))

这是从一段较大的代码中提取的,并抛出了相同的错误

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-21 20:58:11

您应该设置您的StringVar(var1)新值。

代码语言:javascript
复制
def abc(event): 
    numberss=['7','8','9']
    omenu2['menu'].delete(0, 'end')
    for number in numberss:
        omenu2['menu'].add_command(label=number, command=lambda val=number: efg(val))

def efg(val, event=None):
    print('yee')
    var1.set(val)

您使用的是for循环,因此不需要ans(至少在这段代码中不需要),因为它会遍历项目本身。

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

https://stackoverflow.com/questions/45236613

复制
相关文章

相似问题

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