Python 初学者使用变量更改 Tkinter Canvas 项目
Python Beginner Using Variables to change Tkinter Canvas Items
我遇到了一个看似简单的问题,即要更改变量的默认值。我正在尝试使在 Tkinter Canvas 上绘制的矩形在我按下按钮时变小。任何有助于理解变量如何工作的帮助将不胜感激。我在 Python 3.6 工作。
这是一个示例:
from tkinter import *
root=Tk()
bar_var=200
def test_callback():
iteration = 100
for iteration in range(0, iteration):
bar_var -= 1
bar_display.coords('bar', 0, 4, bar_var, 16)
print("bar_var =" + str(bar_var))
bar_display = Canvas(root, height=20, width=200)
bar_display.grid(row=0, column=0)
bar_display.create_rectangle(0, 4, 200, 16, fill='blue', tag='bar')
button = Button(root, text="Resize Bar", command=test_callback)
button.grid(row=1, column=0)
root.mainloop()
我已尝试将 "bar_var" 变量更改为我发现的示例:
bar_var = None
if bar_var():
bar_var = 200
但这似乎会引发异常None对象类型不可调用。任何帮助和解释将不胜感激。谢谢!
您的变量 bar_var
未在您的函数中定义为局部变量。即使你将像 bar_var += 2
这样的简单命令放入函数体中,它也会抛出错误,因为它不知道你的变量是什么。
克服这个问题的一种方法是在调用按钮函数时引用全局变量,令人惊讶的是,global
:
def test_callback():
global bar_var
iteration = 20
for iteration in range(iteration):
bar_var -= 1
bar_display.coords('bar', 0, 4, bar_var, 16)
print("bar_var =" + str(bar_var))
我遇到了一个看似简单的问题,即要更改变量的默认值。我正在尝试使在 Tkinter Canvas 上绘制的矩形在我按下按钮时变小。任何有助于理解变量如何工作的帮助将不胜感激。我在 Python 3.6 工作。 这是一个示例:
from tkinter import *
root=Tk()
bar_var=200
def test_callback():
iteration = 100
for iteration in range(0, iteration):
bar_var -= 1
bar_display.coords('bar', 0, 4, bar_var, 16)
print("bar_var =" + str(bar_var))
bar_display = Canvas(root, height=20, width=200)
bar_display.grid(row=0, column=0)
bar_display.create_rectangle(0, 4, 200, 16, fill='blue', tag='bar')
button = Button(root, text="Resize Bar", command=test_callback)
button.grid(row=1, column=0)
root.mainloop()
我已尝试将 "bar_var" 变量更改为我发现的示例:
bar_var = None
if bar_var():
bar_var = 200
但这似乎会引发异常None对象类型不可调用。任何帮助和解释将不胜感激。谢谢!
您的变量 bar_var
未在您的函数中定义为局部变量。即使你将像 bar_var += 2
这样的简单命令放入函数体中,它也会抛出错误,因为它不知道你的变量是什么。
克服这个问题的一种方法是在调用按钮函数时引用全局变量,令人惊讶的是,global
:
def test_callback():
global bar_var
iteration = 20
for iteration in range(iteration):
bar_var -= 1
bar_display.coords('bar', 0, 4, bar_var, 16)
print("bar_var =" + str(bar_var))