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

因此,我尝试在 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


千巷猫影
浏览 101回答 1
1回答

精慕HU

你的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方法的末尾,而不是当前所在的位置。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python