在Python中使用Tkinter创建GUI

时间:2019-12-09 19:41:45

标签: python tkinter

我正在使用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: 我不知道为什么会发生这种情况,但我只知道当我输入自己的脚和英寸时,将不会执行任何操作。

这里也是GUI外观的示例: Example GUI output

1 个答案:

答案 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()