如何将Tkinter输入用作数学和?

时间:2016-05-03 23:10:26

标签: python math tkinter

我有点发现Tkinter如何运作。 我做了一个小程序,你可以在其中输入(例如)双方的长度。这是我的代码:

    from tkinter import *
from math import *

def show_entry_fields():
   print("Lengte: %s\nBreedte: %s" % (e1.get(), e2.get()))

master = Tk()
Label(master, text="Lengte").grid(row=0)
Label(master, text="Breedte").grid(row=1)

Label(master, text="Oppervlakte").grid(row=2)

e1 = Entry(master)
e2 = Entry(master)

e1.grid(row=0, column=1)
e2.grid(row=1, column=1)

Button(master, text='Quit', command=master.quit).grid(row=3, column=0, sticky=W, pady=4)
Button(master, text='Show', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4)

mainloop()

我还没有使用任何数学,只是因为我不了解它们在Tkinter中是如何工作的。

我想要的是,让用户输入正方形的两边(长度和宽度,我做得很好),并且程序计算正方形的面积。

请帮忙!

修改

   from tkinter import *

def show_entry_fields():
   print("Lengte: %s\nBreedte: %s" % (e1.get(), e2.get()))

master = Tk()
Label(master, text="Lengte").grid(row=0)
Label(master, text="Breedte").grid(row=1)
Label(master, text="Oppervlakte").grid(row=2)

def show_entry_fields():
     area_label['Oppervlakte'] = str(Oppervlakte)

e1 = Entry(master)
e2 = Entry(master)

e1.grid(row=0, column=1)
e2.grid(row=1, column=1)

Button(master, text='Quit', command=master.quit).grid(row=3, column=0, sticky=W, pady=4)
Button(master, text='Show', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4)

mainloop( )

1 个答案:

答案 0 :(得分:1)

您可以使用条目窗口小部件的.get()方法,因为您必须获取其中的任何内容。

这返回的是一个字符串。因此,为了能够使用这些输入执行数学运算,您首先需要将它们转换为整数/浮点数。

您可以使用isdigit()检查输入是否为整数。这将测试字符串是否为整数,这使您能够在将字符串转换为int之前检查此字符串以避免异常。

你可以简单地使用try / except浮动。

此处math模块似乎是不必要的导入。您可以使用基本操作来完成Python内置的操作。

示例:(我假设输入实际上是整数)

def show_entry_fields():

     length, width = int(e1.get()), int(e2.get())
     area = length * width
     print("The area is", area)

回到isdigit ...你可以检查它们确实是如前所述的整数。例如,如果没有任何内容(将作为空白字符串返回)或其他字符串输入到条目中并且您尝试转换(到int),则会收到以下错误消息:

ValueError: invalid literal for int() with base 10: 'some_string'

您可以通过在转换前检查来避免这种情况:

entry_one_value = e1.get()
if entry_one_value.isdigit():
    some_var = int(entry_one_value)

如果要转换为浮点数,该怎么办?您可以使用前面提到的Try / Except:

entry_one_value = e1.get()
try:
    some_var = float(entry_one_value)
except ValueError:
    print("Error. Not a floating point number!")

编辑:计算区域后,您可能希望能够在GUI中显示该区域。

因此,让我们将标签小部件保存为变量,以便我们可以配置它的文本。我们还将它分成两行,因为无论何时.grid()一个小部件,它都返回None,因此我们无法实际使用对小部件的引用。

 area_label = Label(master, text="N/A")
 area_label.grid(row=some_row)

然后,在上一个功能中,您只需配置标签文本。

def show_entry_fields():

     ....
     area_label['text'] = str(area)

编辑以编辑我之前编辑的编辑内容:

from tkinter import *

def show_entry_fields():
     length, width = int(e1.get()), int(e2.get())
     area = length * width
     area_label['text'] = str(area)

master = Tk()
Label(master, text="Lengte").grid(row=0)
e1 = Entry(master)
e1.grid(row=0, column=1)

Label(master, text="Breedte").grid(row=1)
e2 = Entry(master)
e2.grid(row=1, column=1)

area_label = Label(master, text="Oppervlakte")
area_label.grid(row=2)

Button(master, text='Quit', command=master.quit).grid(row=3, column=0, sticky=W, pady=4)
Button(master, text='Show', command=show_entry_fields).grid(row=3, column=1, sticky=W, pady=4)

mainloop()