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