我有两个问题(如果不允许的话,我真的只需要第一部分回答)
我有以下示例代码
import tkinter as tk
window = tk.Tk()
def countIncrease():
count +=1
t1.insert(tk.END,count)
count = 0
t1=tk.Text(window,height=3,width=30)
t1.grid(row=0,column=0,columnspan=3)
b1=tk.Button(window,text="+",height=3,width=10,command=countIncrease)
b1.grid(row=1,column=0)
window.mainloop()
如果我执行此代码,则会收到错误UnboundLocalError: local variable 'count' referenced before assignment
我知道我可以通过向函数
添加global count
来解决这个问题
在我这样做之后,当我按下按钮时,输出为1,重复按下产生12,123,1234,12345等。
我的第一个(也是主要的)问题是,我知道将变量设为全局是不好的做法。如何在不计算全局变量的情况下完成这项工作的正确方法是什么?
我的第二个问题是如何让屏幕“刷新”,因此它只显示最新的变量,即而不是123只是3。
答案 0 :(得分:1)
如果您不想使用class
变量,则应重新构建代码以使用count
并使global
成为类变量。要“刷新”屏幕/ tkinter text
,您需要在插入新内容之前删除内容。
以下是解决这两个问题的一种方法:
import tkinter as tk
class app():
def __init__(self, parent):
self.count = 0
self.t1=tk.Text(parent, height=3,width=30)
self.t1.grid(row=0,column=0,columnspan=3)
self.b1=tk.Button(parent,text="+",height=3,width=10,command=self.countIncrease)
self.b1.grid(row=1,column=0)
def countIncrease(self):
self.count +=1
self.t1.delete('1.0', tk.END) #refresh/delete content of t1
self.t1.insert(tk.END,self.count)
window = tk.Tk()
app(window) # Create an instance of app
window.mainloop()