You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python tkinter自定义Entry类报AttributeError问题求助

Tkinter自定义Entry类点击按钮触发AttributeError错误

代码展示

main.py

from tkinter import *
import Miles


root = Tk()
root.title("Convertitore di miglia in chilometri")
root.configure(height=500, width=500, padx=40, pady=40)

# 创建输入框
# 注意:要获取Entry的内容必须通过按钮触发
miles_entry = Miles.Miles()
miles_entry.grid(column=2, row=0)

# 创建转换按钮
convert_button = Button(text="Convert", command=miles_entry.on_button_click)
convert_button.grid(column=3, row=0)

# 创建标签
equal_label = Label(text="Is equal to:")
equal_label.grid(column=0, row=1)

miles_label = Label(text="miles")
miles_label.grid(column=3, row=1)

root.mainloop()

Miles.py(自定义类)

import tkinter


class Miles(tkinter.Entry):
    def __int__(self):
        super().__int__()
        self.miles_to_convert = 0
        self.converted_miles = 0

    def on_button_click(self):
        print(self.miles_to_convert)

错误信息

点击按钮后触发以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python3.11/tkinter/__init__.py", line 1948, in __call__
    return self.func(*args)
           ^^^^^^^^^^^^^^^^
  File "/home/ic3b3rg/Dropbox/IT_Lectures/Python/100_Days_of_Code/Day26#PROJECT#16.11.2023#Miles_to_kilometers_converter/Miles.py", line 11, in on_button_click
    print(self.miles_to_convert)
          ^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'Miles' object has no attribute 'miles_to_convert'

需求

点击按钮时在控制台打印self.miles_to_convert的值(实际应为输入框中填写的英里数)


解决方案

1. 修复构造函数笔误

自定义类里把Python构造函数__init__写成了__int__,导致初始化逻辑完全未执行,self.miles_to_convert根本没被创建,这是报错的核心原因。修改构造函数名称并完善父类调用:

import tkinter


class Miles(tkinter.Entry):
    def __init__(self, master=None, **kwargs):
        # 调用父类Entry的构造函数,传入必要参数
        super().__init__(master, **kwargs)
        self.miles_to_convert = 0
        self.converted_miles = 0

    def on_button_click(self):
        # 获取输入框内容并转换为数值,添加异常处理避免崩溃
        try:
            self.miles_to_convert = float(self.get())
            print(self.miles_to_convert)
        except ValueError:
            print("请输入有效的数字")

2. 补充输入值关联逻辑

原代码中self.miles_to_convert仅初始化固定值0,未关联输入框的实际内容,所以在点击方法里需要用self.get()获取输入文本,再转为数值类型,同时添加异常处理应对非数字输入的情况。

main.py无需改动,保持原样即可


内容的提问来源于stack exchange,提问作者DavideG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:46:31