tkinter笔记一:从第一个例子学习

安装:

tkinter是python内置模块,实现了tk接口,直接导入模块即可使用。

一个示例:


from tkinter import *
from tkinter import ttk

def calculate(*args):
    try:
        value = float(feet.get())
        meters.set((0.3048 * value * 10000.0 + 0.5)/10000.0)
    except ValueError:
        pass
    
root = Tk()
root.title("Feet to Meters")

mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

feet = StringVar()
meters = StringVar()

feet_entry = ttk.Entry(mainframe, width=7, textvariable=feet)
feet_entry.grid(column=2, row=1, sticky=(W, E))

ttk.Label(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E))
ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=3, sticky=W)

ttk.Label(mainframe, text="feet").grid(column=3, row=1, sticky=W)
ttk.Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E)
ttk.Label(mainframe, text="meters").grid(column=3, row=2, sticky=W)

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)

feet_entry.focus()
root.bind('<Return>', calculate)

root.mainloop()

运行:

tkinter笔记一:从第一个例子学习
tkinter笔记一:从第一个例子学习
tkinter笔记一:从第一个例子学习

分析:

from tkinter import *
from tkinter import ttk



导入tkinter模块,以及导入ttk模块。tkinter是python结合tk的标准接口,ttk是TK8.5之后加入的"主题化工具包"。

root = Tk()
root.title("Feet to Meters")
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)



创建了一个标题为Feet to Meters的主窗体,通过ttk.Frame创建一个框架小工具,所有界面内容都放在框架中,并将框架放在主窗体root中。grid方法定位框架位置,以及对齐方式(NEWS分别代表上左右下),"columnconfigure/rowconfigure"两个方法告诉Tk自适应宽度和高度。

feet = StringVar()
meters = StringVar()
feet_entry = ttk.Entry(mainframe, width=7, textvariable=feet)
feet_entry.grid(column=2, row=1, sticky=(W, E))
ttk.Label(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E))
ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=3, sticky=W)



创建了两个变量feet和meters,分别用于保存输入框的值和第二行的meters值,ttk.Entry在mainframe主框架中创建了一个text输入框,textvariable绑定输入框的值到feet变量上,并且通过grid()方法定位输入框在第一行第二列,左右对齐也就是居中吧。ttk.Label就是创建一个文字label,绑定到变量meters,定位在第二行第二列,居中对齐。通过ttk.Button创建了一个按钮,按钮文字通过text参数指定,command参数指定按钮被点击时执行calculate()函数,按钮定位到右下角,也就是第三行第三列,sticky=W表示左对齐。

ttk.Label(mainframe, text="feet").grid(column=3, row=1, sticky=W)
ttk.Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E)
ttk.Label(mainframe, text="meters").grid(column=3, row=2, sticky=W)



接下来,添加一些其他固定的文字说明,只需要指定text参数即可,一样通过grid方法定位。

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)
feet_entry.focus()
root.bind('<Return>', calculate)



第一行,for...in..语句块,遍历主框架下所有子元素,并给每个子元素增加一些padding,这样每个元素之间会有一些间隔,就不会太紧凑。

第二行,feed_entry聚焦,这样打开程序,光标就会自动在输入框里,不用鼠标点击再输入了。

第三行,通过主窗体的bind()方法,监听回车键,触发calculate方法。

def calculate(*args):
    try:
        value = float(feet.get())
        meters.set((0.3048 * value * 10000.0 + 0.5)/10000.0)
    except ValueError:
        pass



最后来看一下代码最开始定义的一个函数,它必须有一个*args参数,否则按回车键触发的话会报错。这个函数通过输入的脚步数(feet)计算出大概的以米为单位的长度(meters),之前我们先创建了全局变量feet和meters,之后我们创建feet_entry和meters label元件时,用textvariable将两个全局变量分别和两个元件绑定在一起,当变量发生变化时,两个元件也会自动更新显示。


--本章完--





你可能感兴趣的:(tkinter)