我正在使用Tkinter创建一个GUI。我有一个基本的大纲,但是我需要一些有关如何使输入框执行我在框中输入的数字的帮助。我还在Tkinter GUI上还需要一个框来显示最终结果。
GUI的全部用途:
我正在创建的GUI只是英尺到英寸转换器。它有一个用于英尺的输入框和一个用于英寸的输入框。最后的text
框仅几英寸。最终框后面的代码应该将英尺转换为英寸,并加上用户输入到GUI的英寸以获得最终的总和。
示例: 例如5英尺8英寸等于68英寸。
这是我到目前为止编写的代码:
import tkinter as tk
fields = ('Feet', 'Inches')
def feet(entries):
feet = 1
def converter(entries):
feet = 1
inches = 12
final = feet/12 + inches
return final
def makeform(root, fields):
entries = {}
for field in fields:
print(field)
row = tk.Frame(root)
lab = tk.Label(row, width=22, text=field + ": ", anchor='w')
ent = tk.Entry(row)
ent.insert(0, "0")
row.pack(side=tk.TOP,
fill=tk.X,
padx=5,
pady=5)
lab.pack(side=tk.LEFT)
ent.pack(side=tk.RIGHT,
expand=tk.YES,
fill=tk.X)
entries[field] = ent
return entries
if __name__ == '__main__':
root = tk.Tk()
ents = makeform(root, fields)
b1 = tk.Button(root, text='Convert',
command=(lambda e=ents: feet(e)))
b1.pack(side=tk.LEFT, padx=5, pady=5)
b2 = tk.Button(root, text='Quit', command=root.quit)
b2.pack(side=tk.LEFT, padx=5, pady=5)
root.mainloop()
我需要什么帮助:
我需要帮助,只需创建一个简单的文本框,上面写着“英寸:”,它显示英尺的最终总和,这些英尺被转换成英寸,再加上用户在界面中输入的英寸数。
例:
Inches: (final sum)
我还需要在实际GUI的顶部中间放置一个居中的文本框,它自己会说“英尺到英寸转换器”
当前问题:
据我所知,执行的代码将提示GUI,但是当我在英尺或英寸输入中输入任何数字时,什么也不会发生。在Pycharm终端内部,显示以下内容。
Feet:
Inches:
我不知道为什么会发生这种情况,但我只知道当我输入自己的脚和英寸时,将不会执行任何操作。
答案 0 :(得分:1)
首先:按钮应执行converter()
,而不是feet()
command=(lambda e=ents: converter(e))
第二:在converter()
中,您必须从条目中获取值并将其转换为int
feet = int( entries['Feet'].get() )
inches = int( entries['Inches'].get() )
第三:开始时,即使没有文本,您也应该创建Label
,而后期的converter()
必须在此Label
中更改文本
label['text'] = 'Result: {}'.format(final)
最后:在计算中,您必须使用*
,而不是/
final = feet*12 + inches
import tkinter as tk
fields = ('Feet', 'Inches')
def converter(entries):
feet = int( entries['Feet'].get() )
inches = int( entries['Inches'].get() )
final = feet*12 + inches
label['text'] = 'Result: {}'.format(final)
def makeform(root, fields):
entries = {}
for field in fields:
print(field)
row = tk.Frame(root)
lab = tk.Label(row, width=22, text=field + ": ", anchor='w')
ent = tk.Entry(row)
ent.insert(0, "0")
row.pack(side=tk.TOP,
fill=tk.X,
padx=5,
pady=5)
lab.pack(side=tk.LEFT)
ent.pack(side=tk.RIGHT,
expand=tk.YES,
fill=tk.X)
entries[field] = ent
return entries
if __name__ == '__main__':
root = tk.Tk()
ents = makeform(root, fields)
b1 = tk.Button(root, text='Convert',
command=(lambda e=ents:converter(e)))
b1.pack(side=tk.LEFT, padx=5, pady=5)
b2 = tk.Button(root, text='Quit', command=root.quit)
b2.pack(side=tk.LEFT, padx=5, pady=5)
label = tk.Label(root, text='Result: 0')
label.pack()
root.mainloop()