一、根窗体的创建
通过导入的tkinter模块,调用Tk()方法,创建个root根窗口;使用title()方法为我们创建的窗口命名;geometry()方法设置窗口的初始化大小,展示代码如下:
import tkinter as tk
#实例化窗口
root = tk.Tk()
root.title('我的第一个窗口')
#初始化的窗口大小宽460高240(单位都是像素)
root.geometry('460x240') #也可以在加一个初始化时窗口的具体位置如 '+400+560'分别代表左/上边距
root.mainloop()
效果如图:
注意:root.mainloop()方法很重要,如果没有这个方法的话,代码一运行结束,我们的窗口就会关闭。所以这个方法的作用就相当于一个”大循环”,使我们的窗口一直处于打开状态,除非我们手动关闭。
二、 文本标签Label
Label控件用于单行文本内容显示,引入模块调用Label()方法直接创建,实列化于根窗口,一些常见属性,text(文本内容)、bg(背景颜色)、fg(前景色设置字体颜色)、font(字体号,字体大小)、width(宽,单位默认字符)、height(高,单位默认字符)、relief(3D浮雕样式)有五个可选项FLAT(平的),RAISED(凸起),SUNKEN(凹陷),GROOVE(沟槽状边缘),RIDGE(脊状边缘),当然Label也还有其他属性。相关展示代码如下:
import tkinter as tk
#实例化窗口
root = tk.Tk()
root.geometry('460x240')
root.title('Label控件')
#创建一个Label控件实例
label = tk.Label(root,text='这是个Label标签')
label.pack()
root.mainloop()
效果如图:
三、控件实例布局方法
pack()布局:一种较为简单的布局方法,有fill,side两个参数可以选,fill有三个值可以取 X\Y\BOTH,分别表示控件实例水平方向、垂直方向、左右伸展,如果不加参数,默认排序顺序是代码语句的顺序,按自上而下排列。
place()布局:可以使用详细的参数具体布局,常用的参数有这些:x、y,控件实例在水平和垂直方向的位置(注意:根窗体的左上角位置为0,0);relx、rely,控件实例在根窗体水平和垂直方向的相对位置(取值在0.0~1.0);height、width,设置控件实例的高和宽。 relwidth、relheight,控件实例相对于根窗体的宽度和高度取值在(0.0~1.0),place()方法配合relx、rely、relwidth、relheight参数使用可以让得到的实例控件根据根窗体自适应。
grid()布局:基于一种网格布局,常用的参数有,column控件实列的列(最左边为0列);columnspan设置控件实例可以跨越的列数(默认为1列);row控件实例的行(最上面为0行);rowspan设置控件实例可以跨越的行数(默认为1行)。
四、 Message多行文本标签
Message多行文本标签,属性与用法和Label标签类似。首先,调用Message ()方法创建了一个多行文本标签,然后可以设置一些参数,text(文本内容)、bg(背景颜色)、fg(前景色设置字体颜色)、font(字体号,大小)、width(宽,单位默认字符)、height(高,单位默认字符)、relief(3D浮雕样式)有五个可选项FLAT(平的),RAISED(凸起),SUNKEN(凹陷),GROOVE(沟槽状边缘),RIDGE(脊状边缘)等其它属性。相关代码展示如下:
import tkinter as tk
#实例化窗口
root = tk.Tk()
root.geometry('460x240')
root.title('Message控件')
#创建一个Message控件实例
message= tk.Message(root,text='Message标签的第一行内容\
Message标签的第二行内容\
Message标签的第三行内容')
message.pack()
root.mainloop()
效果如图:
值得注意的是,属性text()在创建实例时定义的文本内容是固定的,我们当然也可以改变,这里有两种方法:
① 控件实例的configure()或config()方法
② 定义一个tkinter内部类型变量var=StringVar(),在使用textvariable连接变量var,如textvariable=var,然后var.set()方法改变var的值也可以改变文本内容。
方法一:使用configure()或config()方法
import tkinter as tk
import time
def text_change():
s = time.strftime('%Y-%m-%d %H:%M:%S')
label.configure(text = s)
root.after(1000, text_change)
#实例化窗口
root = tk.Tk()
root.geometry('460x240')
root.title('text文本值变化')
label = tk.Label(root,text='',font=('黑体',16))
label.place(relx=0.2,rely=0.2)
text_change()
root.mainloop()
方法二:定义一个tkinter内部类型变量var=StringVar()
import tkinter as tk
import time
def text_change():
s = time.strftime('%Y-%m-%d %H:%M:%S')
var.set(s)
root.after(1000, text_change)
#实例化窗口
root = tk.Tk()
root.geometry('460x240')
root.title('text文本值变化')
var = tk.StringVar()
label = tk.Label(root,textvariable=var,font=('黑体',16))
label.place(relx=0.2,rely=0.2)
text_change()
root.mainloop()
两种方法运行效果一样:
五、按钮组件Button
Button控件可以响应鼠标点击按钮事件,通过调用Button()方法创建,常用属性有,text(文本内容)、bg(背景颜色)、fg(前景色设置字体颜色)、font(字体号,大小)、width(宽,单位默认字符)、height(高,单位默认字符)、relief(3D浮雕样式),command等,其中command=函数(点击按钮时调用函数,后面不需要接括号)比较重要,主要有两种用法:
①command=函数名(不需要接括号)
②command=lambda:函数名(参数1,参数2…)
相关代码展示如下:
import tkinter as tk
# 创建Idea1函数,当单击按钮‘方法一’时执行里面的代码块
def Idea1():
a = float(Entry1.get())
b = float(Entry2.get())
# s = '%0.2f+%0.2f=%0.2f\n' %(a,b,a+b)
s = f'{a}+{b}={a + b}\n'
text.insert('end', s)
# Entry的delete方法可以在函数运行一次清除其内容
Entry1.delete(0, 'end')
Entry2.delete(0, 'end')
# 创建Idea2函数,当单击按钮‘方法二’时执行里面的代码块
def Idea2(x, y):
a = float(x)
b = float(y)
s = f'{a}+{b}={a + b}\n'
text.insert('end', s)
Entry1.delete(0, 'end')
Entry2.delete(0, 'end')
# 实列化窗口
root = tk.Tk()
root.title('Button控件')
# 初始化窗口大小
root.geometry('460x240')
# resizable禁止改变窗口大小
root.resizable(False, False)
# 创建一个单行文本标签
Label = tk.Label(root, text='输入两个数,从下面两个按钮中选择一个计算')
Label.place(relx=0.2, rely=0.01, relwidth=0.72, relheight=0.1)
#创建Botton点击按钮
btn1 = tk.Button(root,text='方法一',command=Idea1) #command的第一种调用函数方法 ‘commmand=函数名’
btn1.place(relx=0.08, rely=0.4, relwidth=0.2, relheight=0.15)
btn2 = tk.Button(root,text='方法二',\
command=lambda:Idea2(Entry1.get(),Entry2.get()))#command的第二种调用函数方法 'lambda:函数名(控件1.get(),控件2.get())'
btn2.place(relx=0.75, rely=0.4, relwidth=0.2, relheight=0.15)
# 创建Entry输入框
Entry1 = tk.Entry(root)
Entry1.place(relx=0.08, rely=0.15, relwidth=0.2, relheight=0.1)
Entry2 = tk.Entry(root)
Entry2.place(relx=0.75, rely=0.15, relwidth=0.2, relheight=0.1)
# 创建Text文本框并实列化与root窗口上
text = tk.Text(root)
text.place(rely=0.6, relheight=0.45)
root.mainloop()
效果如图所示:
总结
以上这些是最近刚刚学到的,当然这只是一部分后面还有,因为内容太多了,只能分开发了。这里发个文章记录一下学习过程,因为是第一次使用,文字排版还不会弄,看着也是有点乱,只能后面在慢慢熟悉了,最近也是刚学习Tkinter,是个小白,所以难免有不足之处,希望大家可以指出,我们一起交流学习共同进步。