【问题标题】:global variable within a function函数内的全局变量
【发布时间】:2014-03-09 17:44:03
【问题描述】:

我试图告诉一个函数使用 place.forget() 从屏幕上删除按钮 lb 但我收到错误,因为我已将按钮 lb 定义为另一个函数中的全局变量,因此每次尝试回想一下,它没有“看到”全局变量。我知道为什么它给了我错误,我只是不确定如何纠正它,任何帮助将不胜感激。

def page4():
    master.title('Page 4')
    #draw
    c19.grid(pady=slpady)
    c19.grid(row=sly,column=slx1)
    c20.grid(row=sly,column=slx2)
    c21.grid(row=sly,column=slx3)
    c22.grid(row=sly,column=slx4)
    c23.grid(row=sly,column=slx5)
    c24.grid(row=sly,column=slx6)
    rec.grid(row=rec_y, column=rec_x,columnspan=3)
    clear_4.grid(row=clear_y, column=clear_x,columnspan=3)
    #hide
    c1.grid_remove()
    c2.grid_remove()
    c3.grid_remove()
    c4.grid_remove()
    c5.grid_remove()
    c6.grid_remove()
    c7.grid_remove()
    c8.grid_remove()
    c9.grid_remove()
    c10.grid_remove()
    c11.grid_remove()
    c12.grid_remove()
    c13.grid_remove()
    c14.grid_remove()
    c15.grid_remove()
    c16.grid_remove()
    c17.grid_remove()
    c18.grid_remove()
    new_show.grid_remove()
    save_show.grid_remove()
    load_show.grid_remove()
    pre_1.grid_remove()
    pre_2.grid_remove()
    pre_3.grid_remove()
    pre_4.grid_remove()
    clear_1.grid_remove()
    clear_2.grid_remove()
    clear_3.grid_remove()
    lb.place_forget()

#Presets
def presets():
    master.title('Presets')
    pre_1.grid(row=1,column=1,padx=ppadx, pady=ppady)
    pre_2.grid(row=1,column=2,padx=ppadx, pady=ppady)
    pre_3.grid(row=2,column=1,padx=ppadx, pady=ppady)
    pre_4.grid(row=2,column=2,padx=ppadx, pady=ppady)
    global lb
    lb=Button(master,width=20,height=5,text='LOCK',bg='burlywood1',command=lockscreen)
    lb.place(x=450,y=580)

我得到的错误是:

Exception in Tkinter callback Traceback (most recent call last):
    File "C:\Python27\lib\lib-tk\Tkinter.py", line 1470, in __call__
        return self.func(*args)
    File "C:\Users\Josh Bailey\Desktop\pi_dmx\pi_dmx512py2.py", line 412, in page4
        lb.place_forget() NameError: global name 'lb' is not defined

【问题讨论】:

标签: python function variables global


【解决方案1】:

在启动任何函数之前初始化 lb。

【讨论】:

  • @user2996828 你试过什么确切的语法?
  • 我把 'global lb' 移到了所有上面,所以它是第一行,但它仍然不起作用,我为什么要弥补它?
  • 将 lb=Button(master... 也移到那里。
  • 或者甚至只是将“lb=None”放在所有函数之外,然后确保它首先在presets函数中初始化。我认为这会奏效。
【解决方案2】:

我已经通过将全局 lb 和 lb=Button(master,width=20,height=5,text='LOCK',bg='burlywood1',command=lockscreen) 移动到我的代码顶部来解决它这样它就没有任何功能,然后不得不重新排列我的其余代码,以便该按钮(锁屏)调用的功能位于预设功能之上。感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-02
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    • 2020-04-22
    • 2013-07-13
    相关资源
    最近更新 更多