【问题标题】:Global and local variables in function combined with tkinter函数中的全局和局部变量与 tkinter 结合
【发布时间】:2018-10-08 19:59:51
【问题描述】:

为什么会这样?当我点击按钮时,它会切换到“我已被点击”。但是,“action”是函数的本地对象。函数如何引起全局变化?

我希望我需要通过“全局操作”在函数中设置全局操作。

import tkinter as tk
from tkinter import ttk

#Creates tk object
win = tk.Tk()

win.title("TEST")

alabel = ttk.Label(win, text = "A Label")
alabel.grid(column=0, row=0)

#function
def click_me():
    action.configure(text="I have been clicked")
    alable.configure(foreground='red')
    alable.configure(text='a red label')

#adding a button
action = ttk.Button(win, text="Click me", command = click_me)
action.grid(column=1, row=0)


win.mainloop()

【问题讨论】:

  • click_me 中的类型(alable 而你在函数之外有alabel)?
  • "action 是函数的本地对象" 是什么让你这么认为? action 在全局范围内明确定义。
  • 函数可以读取或变异绑定到全局名称的对象。但它不能在没有global 指令的情况下分配给全局名称,因为这会将新对象绑定到名称,而没有指令,新对象将绑定到本地名称。但是这里没有新对象。
  • 顺便说一句,你在click_me 中有几个错别字:你有“alable”而不是“alabel”

标签: python tkinter global local


【解决方案1】:

但是,“action”是函数的本地对象。

这是不正确的。直到你在函数中为action 赋值之前,它都引用了全局变量action

因为您在 action 上调用方法而不是将 action 设置为新值,所以您正在修改 action 指向的对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多