python - 全局变量在 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
解决方案
你应该把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)
推荐阅读
- regex - 如何使用逻辑 AND 将这 2 个正则表达式模式组合成一个?
- javascript - 如何发送带有 index.html 文件的数组。如何访问它?
- webpack - HtmlWebpackPlugin 使用属性块渲染 htmlWebpackPlugin.files.css 为空
- python - 如何在熊猫中将浮点数转换为int?
- angular - TypeError:无法读取单元测试中未定义的属性“alertType”
- swift - 快速反转数据结构的内容
- java - spring boot 无法识别应用程序属性
- php - 基于反射解析表达式
- java - 在游戏控制台 kotlin.UninitializedPropertyAccessException 中出现此错误
- ios - 我应该选择 URLSessionDataTask 还是 URLSessionDownloadTask 来获取图像