当我使用类定义绑定函数时,条目没有定义错误显示



错误截图

当我将绑定函数移动到一个类或另一个模块

时,我面临着这个错误,在屏幕截图中显示显示为条目没有定义。没有class

也可以正常工作
import tkinter 
from tkinter import *
root = tkinter.Tk()
root.wm_title("speed entering calculator")
class Methods1:
i=0
#function for enter
def entering(self,a):
global i #to inform this function that i is global variable
try:     # try and exception used to print message if error happen
value1=int (entry1.get()) #entry1.get()is used to get values which entered in entry box
value1=i + value1
label1['text']=value1
i=value1
except ValueError as ve:
print(f'only integer')

entry1.delete(0, END) # used to clear entry box


ob=Methods1()





#creating canvas
canvas1 = tkinter.Canvas(root, height=400 , width=400, bg="black")
canvas1.pack()
#making entry box for values
entry1 = tkinter.Entry(root, justify="center", )
canvas1.create_window(200,140,height=100,width=100, window=entry1)
value = "the values should be shown here"
label1=Label(root, text =value, height=10) 
label1.pack()


#binding enter key as adding
root.bind('<Return>',ob.entering)



root.mainloop()
我不是很擅长编程语言。所以我希望我能从这里找到一个解决方案

主要问题是试图在声明对象之前引用它们。

重新排列代码解决了这个问题。

另一个主要问题是tkinter使用的输入方法

将其更改为标准形式解决了这个问题。

最后将class中的i改为self.i

现在可以运行了

import tkinter as tk
root = tk.Tk()
root.title("speed entering calculator")
#creating canvas
canvas1 = tk.Canvas(root, height = 400, width = 400, bg = "black")
canvas1.pack()
#making entry box for values
entry1 = tk.Entry(root, justify = "center")
canvas1.create_window(200, 140, height = 100, width = 100, window = entry1)
value = "the values should be shown here"
label1 = tk.Label(root, text = value, height = 10) 
label1.pack()
class Methods1:
i = 0
def entering(self, a):
try:
value1 = int(entry1.get()) 
value1 = self.i + value1
label1['text'] = value1
self.i = value1
except ValueError as ve:
print(f'only integer')
entry1.delete(0, tk.END) # used to clear entry box
ob = Methods1()
#binding enter key as adding
root.bind('<Return>', ob.entering)
root.mainloop()

这段代码中有一些问题,尤其是格式问题,但是当我纠正了缩进后,我没有看到entry1未定义的错误。然而,变量i是未定义的,方法是静态的,这意味着它无论如何都不应该在类中。代码似乎工作一旦我做了一些改变(从类中删除函数,然后删除类整体)。下面是有效的代码:

import tkinter 
from tkinter import *
root = tkinter.Tk()
root.wm_title("speed entering calculator")
i = 0

# function for enter
def entering(event):
global i
# try and exception used to print message if error happen
try:
# get values which are entered in entry box
value1 = int(entry1.get())
value1 = i + value1
label1['text'] = value1
i = value1
except ValueError:
print("only integer")
# clear entry box
entry1.delete(0, END)

# creating canvas
canvas1 = tkinter.Canvas(root, height=400, width=400, bg="black")
canvas1.pack()
# making entry box for values
entry1 = tkinter.Entry(root, justify="center")
canvas1.create_window(200, 140, height=100, width=100, window=entry1)
value = "the values should be shown here"
label1 = Label(root, text=value, height=10)
label1.pack()
# binding enter key as adding
root.bind('<Return>', entering)
root.mainloop()

最新更新