Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么Tkinter事件处理程序可以访问外部变量?_Python_Tkinter - Fatal编程技术网

Python 为什么Tkinter事件处理程序可以访问外部变量?

Python 为什么Tkinter事件处理程序可以访问外部变量?,python,tkinter,Python,Tkinter,在下面的代码(取自)中,我不理解为什么函数增加和减少可以访问小部件lbl\u值,即使它们没有作为函数参数传递或声明为全局变量 一般来说,事件处理程序可以访问哪些变量?范围是什么 import tkinter as tk def increase(): value = int(lbl_value["text"]) lbl_value["text"] = f"{value + 1}" def decrease():

在下面的代码(取自)中,我不理解为什么函数
增加
减少
可以访问小部件
lbl\u值
,即使它们没有作为函数参数传递或声明为全局变量

一般来说,事件处理程序可以访问哪些变量?范围是什么

import tkinter as tk

def increase():
    value = int(lbl_value["text"])
    lbl_value["text"] = f"{value + 1}"


def decrease():
    value = int(lbl_value["text"])
    lbl_value["text"] = f"{value - 1}"

window = tk.Tk()

window.rowconfigure(0, minsize=50, weight=1)
window.columnconfigure([0, 1, 2], minsize=50, weight=1)

btn_decrease = tk.Button(master=window, text="-", command=decrease)
btn_decrease.grid(row=0, column=0, sticky="nsew")

lbl_value = tk.Label(master=window, text="0")
lbl_value.grid(row=0, column=1)

btn_increase = tk.Button(master=window, text="+", command=increase)
btn_increase.grid(row=0, column=2, sticky="nsew")

window.mainloop()
该代码生成此计数器:


lbl\u值
是一个全局变量,因为它未在函数中定义。因为它也是。您可以在函数内部对其进行更改。但是在python中,全局变量必须在函数开头用
global
声明,这在这里是不做的。如果函数中没有定义变量,它会自动变成全局的,所以你不需要使用全局关键字。我认为这与tkinter无关,这只是python的工作方式。事件处理程序没有特殊规则。请参见官方python常见问题解答中的。