在Python中将变量值设置为用户从下拉菜单中选择的值时出现问题

在Python中将变量值设置为用户从下拉菜单中选择的值时出现问题,python,python-3.x,drop-down-menu,menu,tkinter,Python,Python 3.x,Drop Down Menu,Menu,Tkinter,我创建了一个海龟图形程序,它可以绘制与用户键入的键盘上任何键相关的字母。用户还可以按下turtle画布底部的tkinter按钮,使用turtle模块的numinput小部件更改每个字母的高度/宽度。我还创建了一个tkinter下拉菜单,附在tkinter菜单按钮上,现在每次用户更改时,只会将新更改的字母宽度写入该按钮。菜单/菜单按钮是通过以下代码块创建的,该代码块位于更改字母高度/宽度的功能下方,因此值必须为全局值: 每次宽度改变时,菜单按钮被启用,新的宽度通过以下方法附加到菜单上,该方法也嵌入

我创建了一个海龟图形程序,它可以绘制与用户键入的键盘上任何键相关的字母。用户还可以按下turtle画布底部的tkinter按钮,使用turtle模块的numinput小部件更改每个字母的高度/宽度。我还创建了一个tkinter下拉菜单,附在tkinter菜单按钮上,现在每次用户更改时,只会将新更改的字母宽度写入该按钮。菜单/菜单按钮是通过以下代码块创建的,该代码块位于更改字母高度/宽度的功能下方,因此值必须为全局值:

每次宽度改变时,菜单按钮被启用,新的宽度通过以下方法附加到菜单上,该方法也嵌入在允许宽度根据用户输入改变的代码块下面:

global letter_width
hjk.config(state = NORMAL)
user_width_input = (numinput("New Letter Width", "Please set the new letter width (Number between 10-170): ", minval = 10, maxval = 170))
letter_width = letter_width if user_width_input is None else user_width_input
global widthy
widthy = IntVar()
# The following writes the changed letter width to the menu each time it is changed by the user
global hlf
hlf = []
hlf.append(letter_width)
for letter_width in hlf:
   do.add_command(label = str(letter_width), command = lambda letter_width=letter_width: changeletterwidth(letter_width))
编辑:我的问题在于上面的do.add_命令菜单命令中嵌入的changeletterwidth命令。该函数用于将字母宽度全局更改为用户从菜单中选择的值。我为changeletterwidth创建了以下内容:


但是,它不起作用,因为即使我从下拉菜单中选择了一个值,字母宽度仍然保持与以前相同。我在这里做错了什么?我将如何修复它?非常感谢您对此问题的任何帮助!:

它是固定的。最后,我终于明白了,事情如此简单,解决方案完全超出了我的想象。我所要做的就是添加更新并收听changeletterwidth函数,如下所示:

def changeletterwidth(width):
    global letter_width
    letter_width = (width)
    update() #<-- Here...
    listen()#<-- and here.

在changeletterwidth中使用全局字母宽度?@furas是的,我这样做了,但我需要知道如何从菜单中获取值。仅仅把全局字母宽度放在菜单中是不行的。我发现菜单中只有一个值,而字母宽度的值是相同的,所以你不需要从菜单中获取值。您可以使用lambda以如下方式分配带参数的命令:command=lambda w=letter_width:changeletterwidthw,并声明带参数def changeletterwidthwidth的函数:@furas Nope,它仍然不起作用。我不理解您的代码。什么是宽度?我以为你想改变字母的宽度。
def changeletterwidth(width):
    global letter_width
    widthy.set(width)
def changeletterwidth(width):
    global letter_width
    letter_width = (width)
    update() #<-- Here...
    listen()#<-- and here.