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

时间:2016-01-09 03:34:52

标签: python python-3.x drop-down-menu menu tkinter

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

global hjk
hjk = Menubutton(text = "Previous widths", state = DISABLED)
hjk.pack(side = "left")
hjk.menu = Menu(hjk, tearoff = 0)
hjk["menu"] = hjk.menu
global do
do = hjk.menu
hjk.pack()

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

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))

编辑:我的问题在于上面changeletterwidth菜单命令中嵌入的do.add_command命令。该函数应该将字母宽度全局更改为用户从菜单中选择的值。我为changeletterwidth创建了以下内容:

def changeletterwidth(width):
    global letter_width
    widthy.set(width)

然而,不起作用,因为即使我从下拉菜单中选择了一个值,字母宽度仍然与以前相同 我在这里做错了什么以及如何解决? 非常感谢有关此问题的任何帮助! :)

1 个答案:

答案 0 :(得分:0)

它是固定的。最后想出来了,这很简单,解决方案完全飞到了我的脑海。我所要做的就是将update()listen()添加到changeletterwidth函数中,如下所示:

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