目录
Spinbox控件
输入控件;与Entry类似,但是可以指定输入范围值
数值范围控件
例子:
win = tkinter.Tk()
win.title("主界面")
win.geometry("300x200")
sp = tkinter.Spinbox(win,from_=0,to=100)
sp.pack()
win.mainloop()
运行结果:
可以给其设置步长,即每一次按跳转的数值多少,步长默认为1
sp = tkinter.Spinbox(win,from_=0,to=100,increment=5)
运行结果:
给其绑定变量,赋值取值,赋值20,取值20
v = tkinter.StringVar() #绑定变量
sp = tkinter.Spinbox(win,from_=0,to=100,increment=5,textvariable = v)
sp.pack()
#赋值,取值
v.set(20)
print(v.get())
运行结果:
command只要值改变就会执行对应的方法,可以添加一个方法,实时输出spinbox的值,command之后的方法不加()
v = tkinter.StringVar() #绑定变量
def fun():
print(v.get())
sp = tkinter.Spinbox(win,from_=0,to=100,increment=5,textvariable = v,command = fun)
sp.pack()
运行结果:
Menu顶层菜单
Menu | 菜单控件;显示菜单栏,下拉菜单和弹出菜单 |
---|
例子:创建一个菜单
在创建菜单条menu0之后,未添加菜单选项时,菜单条是看不见的
使用.add_cascade()去添加菜单选项,使用add_command()去给菜单选项添加内容
#创建主窗口
win = tkinter.Tk()
win.title("主界面")
win.geometry("300x200")
#菜单条menu0
menu0 = tkinter.Menu(win)
win.config(menu = menu0)
#创建一个菜单选项
menu1 = tkinter.Menu(menu0,tearoff=False)
#给菜单选项添加内容
for i in ["python","java","c","c++","c#","javascript","css","html","PHP","退出"]:
if i == "退出":
menu1.add_command(label = i)
else:
menu1.add_command(label = i)
#向菜单条上添加菜单选项
menu0.add_cascade(label = "语言",menu = menu1)
win.mainloop()
运行结果:
可以在退出前添加分割线
#创建一个菜单选项
menu1 = tkinter.Menu(menu0,tearoff=False)
menu2 = tkinter.Menu(menu0,tearoff=False)
#给菜单选项添加内容
for i in ["python","java","c","c++","c#","javascript","css","html","PHP","退出"]:
if i == "退出":
#添加分割线
menu1.add_separator()
menu1.add_command(label = i,command = win.quit)
else:
menu1.add_command(label = i,command = fun)
#向菜单条上添加菜单选项
menu0.add_cascade(label = "语言",menu = menu1)
menu0.add_cascade(label = "行动",menu = menu2)
运行结果:
Menu鼠标右键菜单
使用win.bind给窗口绑定事件的方法去添加鼠标右键菜单,其中Button-3是鼠标右键
#菜单条menu1
menu0 = tkinter.Menu(win)
win.config(menu = menu0)
#创建一个菜单选项
menu1 = tkinter.Menu(menu0,tearoff=False)
#给菜单选项添加内容
for i in ["python","java","c","c++","c#","javascript","css","html","PHP","退出"]:
if i == "退出":
#添加分割线
menu1.add_separator()
menu1.add_command(label = i,command = win.quit)
else:
menu1.add_command(label = i,command = fun)
#向菜单条上添加菜单选项
menu0.add_cascade(label = "语言",menu = menu1)
def showMenu(event):
#显示菜单,并设置其位置在鼠标右下方
menu0.post(event.x_root,event.y_root)
#给窗口绑定一个事件,鼠标右键事件
win.bind("<Button-3>",showMenu)
运行结果:
Combobox下拉控件
要使用combobox下拉控件,还需要导入
from tkinter import ttk
创建下拉控件例子:
win = tkinter.Tk()
win.title("主界面")
win.geometry("300x200")
#创建下拉控件
com = ttk.Combobox(win)
com.pack()
win.mainloop()
运行结果:
给其设置下拉数据:
#设置下拉数据,用的是元组
com["value"] = ("老子","庄子","墨子","荀子")
运行结果:
可以设置默认值,使用current(),参数为元组下标
#设置默认值,为元组中的下标
com.current(0)
给下拉控件绑定事件
def fun(event):
print(com.get())
#绑定事件
com.bind("<<ComboboxSelected>>",fun)
运行结果:
Frame框架控件
在屏幕上显示一个矩形区域,多作为容器控件
例子:
win = tkinter.Tk()
win.title("主界面")
win.geometry("300x200")
#创建一个frame
frm = tkinter.Frame(win)
frm.pack()
#左边
frm_left = tkinter.Frame(frm)
tkinter.Label(frm_left,text="左上",bg = "red").pack(side = tkinter.TOP)
tkinter.Label(frm_left,text="左下",bg = "blue").pack(side = tkinter.TOP)
frm_left.pack(side = tkinter.LEFT)
#右边
frm_right = tkinter.Frame(frm)
tkinter.Label(frm_right,text="右上",bg = "yellow").pack(side = tkinter.TOP)
tkinter.Label(frm_right,text="右下",bg = "green").pack(side = tkinter.TOP)
frm_right.pack(side = tkinter.RIGHT)
win.mainloop()
这个框架就是
运行结果:
tkinter
数据显示
表格数据
要创建表格需要导入ttk
from tkinter import ttk
例子:设置一张表
import tkinter
from tkinter import ttk
#创建主窗口
win = tkinter.Tk()
win.title("主界面")
win.geometry("500x200")
#表格
tree = ttk.Treeview(win)
tree.pack()
#定义列
tree["columns"] = ("姓名","年龄","身高","体重")
#设置列,现在列还不显示,列宽度为100
tree.column("姓名",width=100)
tree.column("年龄",width=100)
tree.column("身高",width=100)
tree.column("体重",width=100)
#设置表头
tree.heading("姓名",text="姓名-name")
tree.heading("年龄",text="年龄-age")
tree.heading("身高",text="身高-height")
tree.heading("体重",text="体重-weight")
win.mainloop()
运行结果: 在姓名列前多了一个空白列,是为了等等说明是第几行
向表中添加数据("",行的下标,行名称,values数据)
#添加数据
tree.insert("",0,text="line1",values=("张三","12","175","120"))
tree.insert("",1,text="line2",values=("李四","25","190","140"))
运行结果:
树状数据
例子:创建一个树状数据
#创建主窗口
win = tkinter.Tk()
win.title("主界面")
win.geometry("500x200")
#表格
tree = ttk.Treeview(win)
tree.pack()
#添加一级树枝
tree1 = tree.insert("",0,"中国",text="China",values=("安徽"))
tree2 = tree.insert("",1,"美国",text="America",values=("USA"))
tree3 = tree.insert("",2,"英国",text="England",values=("UK"))
win.mainloop()
程序运行结果:
给一级树枝添加二级树枝
#添加二级树枝
tree1_1 = tree.insert(tree1,0,"广东",text = "China广东",values = ("adafa"))
tree1_2 = tree.insert(tree1,1,"云南",text = "China云南",values = ("adafdsa"))
tree1_3 = tree.insert(tree1,2,"浙江",text = "China浙江",values = ("adafa"))
tree2_1 = tree.insert(tree2,0,"夫利皮",text = "US夫利皮",values = ("adafa"))
tree2_2 = tree.insert(tree2,0,"真的皮",text = "US真的皮",values = ("adafa"))
程序运行结果:
布局
绝对布局
改变窗口的大小,窗口变化,对内部的布局没有影响
例子:
label1 = tkinter.Label(win,text="first",bg="green")
label2 = tkinter.Label(win,text="second",bg="yellow")
label3 = tkinter.Label(win,text="third",bg="red")
#绝对布局
label1.place(x=0,y=0)
label2.place(x=10,y=30)
label3.place(x=50,y=80)
程序运行结果:
相对布局
窗体改变对控件有影响
例子:
#创建主窗口
win = tkinter.Tk()
win.title("主界面")
win.geometry("300x200")
#
label1 = tkinter.Label(win,text="first",bg="green")
label2 = tkinter.Label(win,text="second",bg="yellow")
label3 = tkinter.Label(win,text="third",bg="red")
#绝对布局
label1.pack(fill=tkinter.Y,side=tkinter.LEFT)
label2.pack(fill=tkinter.X,side=tkinter.TOP)
label3.pack()
win.mainloop()
程序运行结果:
表格布局
将布局设置为几行几列的样式
例子:将label1设置为0行0列,将label2设置为0行1列,将label3设置为1行0列
win = tkinter.Tk()
win.title("主界面")
win.geometry("300x200")
#
label1 = tkinter.Label(win,text="first",bg="green")
label2 = tkinter.Label(win,text="second",bg="yellow")
label3 = tkinter.Label(win,text="third",bg="red")
#表格布局 row行 column列
label1.grid(row = 0,column = 0)
label2.grid(row = 0,column = 1)
label3.grid(row = 1,column = 0)
win.mainloop()
程序运行结果:
鼠标事件
Tkinter 按钮组件用于在 Python 应用程序中添加按钮,按钮上可以放上文本或图像,按钮可用于监听用户行为,能够与一个 Python 函数关联,当按钮被按下时,自动调用该函数。
语法
语法格式如下:
w = Button ( master, option=value, ... )
master: 按钮的父容器。
options: 可选项,即该按钮的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。
序号 | 可选项 & 描述 |
---|---|
1 | activebackground当鼠标放上去时,按钮的背景色 |
2 | activeforeground当鼠标放上去时,按钮的前景色 |
3 | bd按钮边框的大小,默认为 2 个像素 |
4 | bg按钮的背景色 |
5 | command按钮关联的函数,当按钮被点击时,执行该函数 |
6 | fg按钮的前景色(按钮文本的颜色) |
7 | font文本字体 |
8 | height按钮的高度 |
9 | highlightcolor要高亮的颜色 |
10 | image按钮上要显示的图片 |
11 | justify显示多行文本的时候,设置不同行之间的对齐方式,可选项包括LEFT, RIGHT, CENTER |
12 | padx按钮在x轴方向上的内边距(padding),是指按钮的内容与按钮边缘的距离 |
13 | pady按钮在y轴方向上的内边距(padding) |
14 | relief边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT。 |
15 | state设置按钮组件状态,可选的有NORMAL、ACTIVE、 DISABLED。默认 NORMAL。 |
16 | underline下划线。默认按钮上的文本都不带下划线。取值就是带下划线的字符串索引,为 0 时,第一个字符带下划线,为 1 时,前两个字符带下划线,以此类推 |
17 | width按钮的宽度,如未设置此项,其大小以适应按钮的内容(文本或图片的大小) |
18 | wraplength限制按钮每行显示的字符的数量 |
19 | text按钮的文本内容 |
19 | anchor锚选项,控制文本的位置,默认为中心 |
鼠标点击事件
- <Button-1>:鼠标左键单击
- <Button-3>:鼠标右键单击
- <Button-2>:鼠标滑轮单击
- <Double-Button-1>:鼠标左键双击
- <Triple-Button-1>:鼠标左键三击
点击输出鼠标的位置(x,y)
例子:点击按钮之后,会输出当前鼠标的位置x,y
win = tkinter.Tk()
win.title("主界面")
win.geometry("300x200")
#定义方法,输出鼠标位置
def fun1(event):
print(event.x,event.y)
button1 = tkinter.Button(win,text = "leftmouse button")
#给按钮绑定事件
button1.bind("<Button-1>",fun1)
button1.pack()
win.mainloop()
程序运行结果:
鼠标移动事件
<B1-Motion>:鼠标左键移动
<B2-Motion>:鼠标中键移动
<B3-Motion>:鼠标右键移动
例子:鼠标左键按住后显示鼠标位置
def fun(event):
print(event.x,event.y)
label = tkinter.Label(win,text="good morning")
label.pack()
label.bind("<B1-Motion>",fun)
win.mainloop()
程序运行结果:
鼠标释放事件
当释放鼠标时事件发生。
<ButtonRelease-1>:鼠标左键释放
<ButtonRelease-2>:鼠标中键释放
<ButtonRelease-3>:鼠标右键释放
例子:
def fun(event):
print(event.x,event.y)
label.bind("<ButtonRelease-1>",fun)
进入事件和离开事件
<Enter>:当鼠标进入控件时事件发生
label.bind("<Entry>",fun)
<Leave>:当鼠标离开控件时事件发生
label.bind("<Leave>",fun)
响应所有按键的事件
<Key>:响应键盘的按键
例子:
#设置焦点
win.focus_set()
def fun(event):
print("event.chr = ",event.char)
print("event.keycode = ", event.keycode)
win.bind("<Key>",fun)
win.mainloop()
响应特殊按键的事件
<Shift_L> :左shift键
<Shift_R> :右shift键
<Return> :回车键
<BackSpace> :空格键
组合按键事件
Control-Alt-b :按住control+alt+b键
Shift-Up :按住shift和向上键
例子:
#设置焦点
win.focus_set()
def fun(event):
print("event.chr = ",event.char)
print("event.keycode = ", event.keycode)
win.bind("<Control-Alt-b>",fun)
win.mainloop()
一起学习,一起进步 -.- ,如有错误,可以发评论