为了账号安全,请及时绑定邮箱和手机立即绑定

通过按钮调用函数时出现 Tkinter 错误

通过按钮调用函数时出现 Tkinter 错误

千巷猫影 2023-09-12 16:47:25
因此,我尝试在 tkinter 中使用一些条目小部件,然后使用同时执行多个 .get() 命令的函数。但是,我收到一个错误,即该函数未定义,即使它们位于同一类中。这是代码示例:def GetSubjects():        subject1 = subject1entry.get()        subject2 = subject2entry.get()        subject3= subject3entry.get()subjectConfirm.grid(row=3, column=0, command=GetSubjects)正如我所说,它们都在同一类中,但按钮无法调用该函数。我对 tkinter 和这个网站比较陌生,所以如果这是简单的事情请原谅我,但我在其他地方找不到解决方案。编辑:这是整个课程,我知道我的代码可能非常次优,但这是我尝试过的第一个大型项目class Menu:    def __init__(self, master):        frame = tk.LabelFrame(master, text="Main Menu", padx=100, pady=10)        frame.grid(row=0, column=0, padx=15, pady=15)        # Create timetable button        createTimetable = tk.Button(frame, text="Create Timetable", command=self.CreateTimetable)        createTimetable.grid(row=0, column=0)        # Exit program button        exitProgram = tk.Button(frame, text="Exit Program", command=self.CloseWindow)        exitProgram.grid(row=1, column=0)    def CloseWindow(self):        root.destroy()    def GetSubjects():        subject1 = subject1entry.get()        subject2 = subject2entry.get()        subject3 = subject3entry.get()    def CreateTimetable(self):        tableWindow = tk.Toplevel(root)        tableWindow.title('Timetable Maker Window')        tableWindow.geometry("800x500+400+200")        # Subject labels        subjectlabel1 = tk.Label(tableWindow, text="Enter your first subject:")        subjectlabel2 = tk.Label(tableWindow, text="Enter your second subject:")        subjectlabel3 = tk.Label(tableWindow, text="Enter your third subject:")        # Subject entry boxes        subject1entry = tk.Entry(tableWindow)        subject2entry = tk.Entry(tableWindow)        subject3entry = tk.Entry(tableWindow)        # Puts subject entry boxes on screen        subject1entry.grid(row=0, column=1)        subject2entry.grid(row=1, column=1)        subject3entry.grid(row=2, column=1)        # Puts subject labels on screen
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

你的GetSubjects()方法应该是这样的


def GetSubjects(self):

    subject1 = self.subject1entry.get()

    subject2 = self.subject2entry.get()

    subject3 = self.subject3entry.get()

你的CreateTimetable方法应该看起来像这样(不完整但给你正确的想法)


def CreateTimetable(self):

    # Code removed for clarity

    self.subject1entry = tk.Entry(tableWindow)

    self.subject2entry = tk.Entry(tableWindow)

    self.subject3entry = tk.Entry(tableWindow)

按钮的回调应该如下所示


subjectConfirm = tk.Button(tableWindow,text="Press to confirm subjects", command=self.GetSubjects)

属性/方法需要成为Menu类的一部分,因此您可以用来self.告诉 python 为当前类创建这些属性(self 是典型约定,但只要保持一致,就可以是任何内容)。


哦,这些print(subject1)部分需要位于GetSubjects方法的末尾,而不是当前所在的位置。


查看完整回答
反对 回复 2023-09-12
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号