如何解决Tkinter回调中的异常:TypeError:float参数必须是字符串或数字,而不是'Event'
import tkinter as tk
import tkinter.font as font
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
s_data = pd.read_csv("https://raw.githubusercontent.com/AdiPersonalWorks/Random/master/student_scores%20-%20student_scores.csv")
def predicted_score(hour :float):
X = s_data.iloc[:,:-1].values
y = s_data.iloc[:,1].values
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=0)
linear_regressor = LinearRegression()
linear_regressor.fit(X_train,y_train)
y_pred = linear_regressor.predict(X_test)
marks = linear_regressor.predict(hour)
return marks
window = tk.Tk()
window.geometry("600x300")
tk.Label(window,text="Marks Predictor",justify= tk.CENTER,font = font.Font(size = 40,weight='bold')).pack()
tk.Label(window,text="Predict Percentage",justify= tk.LEFT,font = font.Font(size = 20,weight='bold')).pack()
hour_input = tk.Entry(window)
hour_input.bind("<Return>",predicted_score)
result_predicted_score = tk.Label(window).pack()
hour_input.pack()
window.mainloop()
以上代码根据学生学习的小时数预测学生的成绩。预测是使用简单的线性回归完成的。我已经将Tkinter用于GUI。运行此程序时出现“ TypeError:float()参数必须是字符串或数字,而不是'Event'”错误。
解决方法
将功能绑定到事件时,将始终使用代表事件的对象来调用该功能。但是,您的函数需要第一个参数是浮点数。
您需要修改predicted_score
来接受事件对象,或者绑定到另一个接受事件对象的函数,然后调用predicted_score
。
在您的情况下,由于小时数来自输入内容,因此我建议您使用专用功能。我假设您想在result_predicted_score
中显示分数,因此回调函数也可以做到这一点:
def compute_score(event):
hour = float(hour_input.get())
score = predicted_score(hour)
result_predicted_score.configure(text=str(score))
...
hour_input.bind("<Return>",compute_score)
但是,要正常运行,result_predicted_score
必须正确初始化。您正在将其设置为None
。需要这样定义:
result_predicted_score = tk.Label(windonw)
result_predicted_score.pack()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。