我有点发现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( )
答案 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()