【问题标题】:entry is not defind error showing while i use a class to define the binding function当我使用类定义绑定函数时显示条目未定义错误
【发布时间】:2021-10-27 14:00:41
【问题描述】:

screenshot of error

当我将绑定函数移动到一个类或另一个模块中时,我遇到了屏幕截图中显示的这个错误

显示为条目未定义.. 没有类也可以正常工作

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()

我不太擅长编程语言。所以我希望我能从这里找到解决方案

【问题讨论】:

  • 请提供minimal reproducible example(阅读如何制作一个,否则很难理解您的问题)并修复您的缩进,如果您不理解课程,请不要尝试使用他们,首先了解它们是如何工作的,然后在代码中使用它们,现在我建议你坚持使用函数式方法,直到你理解类。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python tkinter development-environment software-design tkinter-entry


【解决方案1】:

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

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

另一个主要问题是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()

【讨论】:

  • 嘿..我使用的导入方法有什么问题?谢谢
  • 嗯,基本上第一个导入按名称导入tkinter,而第二个导入所有内容。
【解决方案2】:

这段代码有一些问题,尤其是格式问题,但是当我更正缩进时,我没有看到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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    相关资源
    最近更新 更多