python - 带有 TypeError 的 Tkinter 回调中的异常
问题描述
我一直在做一个小项目,我可以在其中输入我的考试成绩并让我的计算机计算我当前学期的 GPA。我刚刚开始并一直致力于使用 tkinter 添加和删除课程。我达到了在我的根窗口中添加一个窗口以添加新课程开始在 Tkinter 中给我一个错误的地步:
Exception in Tkinter callback
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib
/python2.7/lib-tk/Tkinter.py", line 1536, in __call__
return self.func(*args)
TypeError: createCourseEntry() takes exactly 1 argument (0 given)
这是我的代码:
from Tkinter import *
import tkMessageBox
course = list()
class Course:
course = list()
def __init__(self, longName, shortName, professor):
self.longName = longName
self.shortName = shortName
self.professor = professor
@staticmethod
def importCourses():
n=0
course[:] = []
with open('Courses.txt', 'r') as f:
for line in f:
if line == '\n':
continue
longName, shortName, professor = line.rstrip("\n\r").split('-')
course.append(Course(longName, shortName, professor))
n=n+1
@classmethod
def createCourse(cls, newLongName, newShortName, newProfessor):
with open('Courses.txt', 'r') as g:
lines = g.readlines()
with open('Courses.txt', 'a') as f:
for line in lines:
if ('-' + newShortName + '-') in line:
tkMessageBox.showinfo("Oops!", "There is already a Course with the name " + newShortName + '.')
return
f.write(newLongName + '-' + newShortName + '-' + newProfessor)
Course.importCourses()
@staticmethod
def createCourseEntry(self):
createCourseEntryWindow = Toplevel(self)
newCourseSNameLabel = Label(createCourseEntryWindow, text="Course Short Name:")
newCourseSNameLabel.grid(row=0,column=0)
newCourseLNameLabel = Label(createCourseEntryWindow, text="Course Long Name:")
newCourseLNameLabel.grid(row=1,column=0)
newCourseProfessorLabel = Label(createCourseEntryWindow, text="Course Professor:")
newCourseProfessorLabel.grid(row=2,column=0)
newCourseSNameEntry = Entry(createCourseEntryWindow)
newCourseSNameEntry.grid(row=0,column=1)
newCourseLNameEntry = Entry(createCourseEntryWindow)
newCourseLNameEntry.grid(row=1,column=1)
newCourseProfessorEntry = Entry(createCourseEntryWindow)
newCourseProfessorEntry.grid(row=2,column=1)
createNewCourseButton = Button(createCourseEntryWindow, text="Create",
command=Course.createCourse(newCourseSNameEntry.get(),newCourseLNameEntry.get(),newCourseProfessorEntry.get()))
createNewCourseButton.grid(row=3,column=0)
cancelCreation = Button(createCourseEntryWindow, text="Cancel", command=lambda win=top: win.destroy())
cancelCreation.grid(row=3,column=1)
def deleteCourse(deleteShortName):
with open('Courses.txt', 'r') as f:
lines = f.readlines()
with open('Courses.txt', 'w') as g:
for line in lines:
if ('-'+deleteShortName+'-') not in line:
g.write(line)
Course.importCourses()
def deleteCourseEntry(self):
deleteCourseEntryWindow = TopLevel(self)
deleteCourseLabel = Label(deleteCourseEntryWindow, text="Course Short Name:")
deleteCourseLabel.grid(row=0, column=0)
deleteCourseSNameEntry = Entry(deleteCourseEntryWindow)
deleteCourseSNameEntry.grid(row=0,column=1)
deleteCourseButton = Button(deleteCourseEntryWindow, text="Delete",
command=Course.deleteCourse(deleteCourseSNameEntry.get()))
deleteCourseButton.grid(row=1,column=0)
cancelDeletion = Button(deleteCourseEntryWindow, text="Cancel", command=lambda win=top: win.destroy())
cancelDeletion.grid(row=1,column=1)
Course.importCourses()
# Course.deleteCourse('LIT2380')
#Course.createCourse('Literature by Women','LIT2380','Alexandra Asbille')
root = Tk()
createCourseWindowButton = Button(root, text= 'Create Course', relief='solid', command=Course.createCourseEntry)
createCourseWindowButton.grid(row=0, column=0)
deleteCourseWindowButton = Button(root, text= 'Delete Course', relief='solid', command=Course.deleteCourseEntry)
deleteCourseWindowButton.grid(row=0, column=1)
courseSNameLabels = list()
courseLNameLabels = list()
courseProfessorLabels = list()
for x in range(0,len(course)):
courseSNameLabels.append(Label(root, text= course[x].shortName, relief='solid'))
for x in range(0,len(course)):
courseLNameLabels.append(Label(root, text= course[x].longName, relief='solid'))
for x in range(0,len(course)):
courseProfessorLabels.append(Label(root, text= course[x].professor, relief='solid'))
m=1
for y in courseSNameLabels:
y.grid(row=m)
m=m+1
m=1
for y in courseLNameLabels:
y.grid(row=m, column=1)
m=m+1
m=1
for y in courseProfessorLabels:
y.grid(row=m, column=2)
m=m+1
root.mainloop()
显然,没有必要通过整个代码来找到问题,但我添加了它以防万一。只有在我添加了“createCourseEntry”方法并单击位于 root = tk() 行之后的 createCourseWindowButton 后,问题才出现。我尝试在这些按钮中的命令函数后添加括号,但仍然出现错误。这几天我一直在尝试解决这个问题。非常感谢您的帮助。
解决方案
推荐阅读
- kubernetes - 当模板的部署配置中不再列出环境变量时,从部署中删除它们
- javascript - 我可以对已过滤的项目应用过滤器吗 (JavaScript)
- slurm - 获取 SLURM 集群中节点的启动和故障历史记录
- flutter - 在 Widget Flutter 之外调度 Bloc 事件
- javascript - 通过 React 中的路由查找与用户链接的数据库中的数组?
- java - 如何扩展具有参数化 @BeforeMethod 的类
- c# - 如何根据最终的注入链目标注入实例?
- powershell - VS Code 或 InternetExplorer.Application 似乎正在缓存我的脚本结果?
- node.js - 用 NodeJS 重构 mongoose 集合模型
- python - 无需打开即可拆分 Excel 文件