PythonGUI生成数学方程

PythonGUI生成数学方程,python,user-interface,tkinter,Python,User Interface,Tkinter,我有一个关于python GUI的特定项目的家庭作业问题 我的目标是创建一个GUI,它询问一个随机的数学方程,如果该方程的计算结果正确,那么我将收到一条消息,说明它是正确的 我的主要问题是找出我的陈述应该放在哪里,这样它们就会出现在标签上;我有一个生成随机方程的文本框,下一个文本框是空白的,我可以输入解,然后在最后一个“回车”按钮来评估我的解 看起来是这样的: [*randomly generated equation*][*Empty space to enter solution*] [EN

我有一个关于python GUI的特定项目的家庭作业问题

我的目标是创建一个GUI,它询问一个随机的数学方程,如果该方程的计算结果正确,那么我将收到一条消息,说明它是正确的

我的主要问题是找出我的陈述应该放在哪里,这样它们就会出现在标签上;我有一个生成随机方程的文本框,下一个文本框是空白的,我可以输入解,然后在最后一个“回车”按钮来评估我的解

看起来是这样的:

[*randomly generated equation*][*Empty space to enter solution*] [ENTER]
我已经设法得到了布局和评估参数,但我不知道从这里走到哪里

这是我目前的代码:

class Equation(Frame):

    def __init__(self,parent=None):
        Frame.__init__(self, parent)
        self.pack()
        Equation.make_widgets(self)
        Equation.new_problem(self)

    def make_widgets(self):
        Label(self).grid(row=0, column=1)
        ent = Entry(self)
        ent.grid(row=0, column=1)
        Label(self).grid(row=0, column=2)
        ent = Entry(self)
        ent.grid(row=0, column=2)
        Button(self, text='Enter', command=self.evaluate).grid(row=0, column=3)

    def new_problem(self):
        pass

    def evaluate(self):
        result = eval(self.get())
        self.delete(0, END)
        self.insert(END, result)
        print('Correct')
make_widgets()
中,您创建了一组小部件,但没有将它们分配给任何变量。这会阻止您在创建它们之后访问它们。尝试将它们分配给实例变量,例如:

def make_widgets(self):
        self.equation_label = Label(self)
        self.equation_label.grid(row=0, column=1) #notice that grid() is on another line
        self.entry1 = Entry(self)
        ent.grid(row=0, column=1)
        self.solution_label = Label(self)
        self.solution_label.grid(row=0, column=2)
        self.entry2 = Entry(self)
        ent.grid(row=0, column=2)
        self.button = Button(self, text='Enter', command=self.evaluate)
        self.button.grid(row=0, column=3)
这样,您可以从类中的其他函数访问它们,如下所示:

self.solution_label.config(text="Hello World")
因此,您的回调结果会更像这样:

def evaluate(self):
        result = eval(self.get())
        self.solution_label.config(text=str(result))
对于
Entry
小部件,您可以使用J.F.Sebastian的答案,也可以使用
insert
delete
方法(看起来您一直在尝试这样做):

是查找小部件配置选项等的优秀资源

编辑


有关设置小部件值的另一种方法,请参阅。

目前的问题属于“太本地化”类别。为了防止你的问题被关闭,我会考虑改写你的问题,这样答案会对这个网站的其他用户更有帮助。例如,“如何从回调函数内部更改Tkinter标签的值?”。(回调是在引发事件时调用的函数,在本例中,
self.evaluate
是相关的回调函数。--我假设这就是您真正想要做的。)感谢您纠正我的错误。我最近刚开始使用GUI,所以我真的不知道如何将GUI函数分组到一个适当的问题中。使用
self.make\u widgets()
而不是
等式。make\u widgets(self)
我在语法方面取得了一些进展,但我有一个关于self.get()的小问题。“get”是否专门与Tk导入关联?到目前为止,我收到了关于get未定义的错误,但在我的笔记中,self.get只需一个输入即可正常工作。另外,由于我发布的代码来自家庭作业模板,因此没有导入Tk。
self
在本例中可能指的是
Frame
的一个实例
Frame
没有
get()
方法。在
make_widgets
中,您要做的是创建一个
StringVar
对象,并将其设置为等于
self
StringVar
确实有一个
get()
方法。您可以这样访问它:
self.some\u var\u name.get()
@neroditrich另外,我在您的
make\u widgets()
方法中捕获了一些其他内容。看看我是如何把
grid()
方法放在上面一行的。啊,J.F.塞巴斯蒂安的输入现在有意义了。非常感谢。
def evaluate(self):
        result = eval(self.get())
        self.solution_label.config(text=str(result))
def evaluate(self):
    #...some code...
    self.solution_entry.delete(0, END)
    self.solution_entry.insert(0, "Some text")
    #...more code...