因为大作业要做界面,只好学一下,就算是记录一下。
关于Tkinter可以看百度百科Tkinter_百度百科baike.baidu.com
废话不说直接上代码
import tkinter as tk
from tkinter import ttk#可以理解为各种控件的集合吧,哈哈
win = tk.Tk()#实例化一个窗口对象
aLabel = ttk.Label(win, text="A Label")#在窗口上创建一个label
aLabel.grid(column = 0,row = 0)#label在第一行第一列
def clickMe():
action.configure(text = "**I have been Clicked**")#action是模块级变量
aLabel.configure(foreground = 'blue')
action = ttk.Button(win,text = "Click Me!",command = clickMe)
action.grid(column = 1,row = 0)
win.mainloop()#保证循环
action这个东西很奇怪
他是在前面函数体中第一次出现,但是声明却在后面,按照官方的说法,这是一个模块级的变量,所以只要在函数调用前定义一下就可以用了。
aLabel.grid(column = 0,row = 0)这个column,row可以看做是控件所在的行列位置
我们点一下会看到颜色变化:
下面看第二个栗子:
import tkinter as tk
from tkinter import ttk
win = tk.Tk()
# aLabel = ttk.Label(win, text="A Label")
# aLabel.grid(column = 0,row = 0)
def clickMe():
action.configure(text = "hello "+name.get())#action是模块级变量
if __name__=='__main__':
action = ttk.Button(win, text="Click Me!", command=clickMe)
action.grid(column = 1,row=1)
ttk.Label(win,text="Enter a name:").grid(column = 0,row=0)
name = tk.StringVar()
nameEntered = ttk.Entry(win,width = 20,textvariable = name)
nameEntered.grid(column = 0,row =1)
win.mainloop()
还是上面的问题:这个action是个啥?既不是全局变量,又不是传入的参数。
其实这是个回调函数(callback)当按钮被点击的时候,变量的确也就存在了,所以我们不用担心他没有声明的问题。
下面这一句:
ttk.Label(win,text="Enter a name:").grid(column = 0,row=0)
是在第0行第0列放置一个label,关于布局(layout management)我们会在后文详述。
关于name的原理同上,也是在按钮按下时回调,值得注意的是这个类型:StringVar(它不是严格意义上的python类型而是这个库下面的类型)StringVar的作用
查询了很多资料,我们在使用界面编程的时候,有些时候是需要跟踪变量的值的变化,以保证值的变更随时可以显示在界面上。由于python无法做到这一点,所以使用了tcl的相应的对象,也就是StringVar、BooleanVar、DoubleVar、IntVar所需要起到的作用
然后,我们把name变量绑定到了Entry(我们不难推测,这是一个输入框),下一句是这个输入框的位置
最后一句窗口循环。(卧槽解释了这么多)
结果如图:点击一下
总结一下,这第一篇我们 了解了ttk下的控件 label,button ,entry 以及基本的布局
还有一个类型StringVar,以及总重要的,回调函数的理解。
我们下篇债见。