首页 > 解决方案 > 全局变量在 Python Tkinter 中充当局部变量

问题描述

我正在尝试在 tkinter 中创建一个秒表,我需要一个counter变量才能这样做。但是,问题是该变量充当本地变量,即使我将其声明为全局变量。

这是我的脚本:

import tkinter as tk

root = tk.Tk()


global counter
counter = 0


def go():
    label.config(text=str(counter))
    counter+=1
    root.after(1000,go2)
def go2():
    label.config(text=str(counter))
    counter+=1
    root.after(1000,go)
def stop():
    label.config(text=str(0))


gobutt = tk.Button(text = "Go", command = lambda: go())
stopbutt = tk.Button(text = "Stop", command = lambda: go2())
gobutt.pack()
stopbutt.pack()

label = tk.Label(text = "0")
label.pack()

root.mainloop()

这是我的错误信息:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 1699, in __call__
    return self.func(*args)
  File "/Users/MinecraftMaster/Desktop/Python/Tests/TkinterTest/Tkinter Test.py", line 29, in <lambda>
    gobutt = tk.Button(text = "Go", command = lambda: go())
  File "/Users/MinecraftMaster/Desktop/Python/Tests/TkinterTest/Tkinter Test.py", line 18, in go
    label.config(text=str(counter))
UnboundLocalError: local variable 'counter' referenced before assignment

标签: pythontkinter

解决方案


你应该把global counter你的函数定义放在里面,这样你的函数中counter引用的就是全局范围内定义的那个

counter = 0

def go():
    global counter
    label.config(text=str(counter))
    counter+=1
    root.after(1000,go2)

def go2():
    global counter 
    label.config(text=str(counter))
    counter+=1
    root.after(1000,go)

推荐阅读