import tkinter
tkinter._test()
import tkinter
base = tkinter.Tk()
base.mainloop()
按钮
Button 按钮组件
RadioButton 单选框组件
CheckButton 选择按钮组件
Listbox 列表框组件
文本输入组件
Entry 单行文本框组件
Text 多行文本框组件
标签组件
Label 标签组件,可以显示图片和文字
Message 标签组件,可以根据内容将文字换行
菜单
Menu 菜单组件
MenuButton 菜单按钮组件,可以使用Menu代替
滚动条
scale 滑块组件
Scrollbar 滚动条组件
其他组件
Canvas 画布组件
Frame 框架组件,将多个组件编组
Toplevel 创建子窗口容器组件
创建总面板
创建面板上的各种组件
同步骤2相似,创建好多个组件
最后,启动总面板的消息循环
import tkinter
# 创建总面板
base = tkinter.Tk()
# 标题
base.wm_title('标题')
lb = tkinter.Label(base, text='Python label')
lb.pack()
# 消息循环
base.mainloop()
# Label
import tkinter
base = tkinter.Tk()
base.wm_title('标题')
lb1 = tkinter.Label(base, text='lb1文字内容').pack()
lb2 = tkinter.Label(base, text='红色背景', background='red').pack()
lb3 = tkinter.Label(base, text='蓝色背景', background='blue').pack()
base.mainloop()
# Button
import tkinter
def showlb1():
global base
lb1 = tkinter.Label(base, text='用函数调用').pack()
base = tkinter.Tk()
# 生成一个按钮
# command参数指示,当按钮被按下时,执行哪个函数
btn = tkinter.Button(base, text='showlb1', command=showlb1).pack()
base.mainloop()
Button的属性:
anchor 设置按钮中文字的对其方式,相对于按钮的中心位置
background(bg) 设置按钮的背景颜色
foreground(fg) 设置按钮的前景色(文字的颜色)
borderwidth(bd) 设置按钮边框宽度
cursor 设置鼠标在按钮上的样式
command 设定按钮点击时触发的函数
bitmap 设置按钮上显示的位图
font 设置按钮上文本的字体
width 设置按钮的宽度 (字符个数)
height 设置按钮的高度 (字符个数)
state 设置按钮的状态
text 设置按钮上的文字
image 设置按钮上的图片
鼠标样式
# Button
import tkinter
def showlb1():
global base
lb1 = tkinter.Label(base, text='用函数调用').pack()
base = tkinter.Tk()
# 生成一个按钮
# command参数指示,当按钮被按下时,执行哪个函数
btn = tkinter.Button(base, text='showlb1', command=showlb1, bg='black', fg='white', bd=10, cursor='circle').pack()
base.mainloop()
控制组件的摆放方式
三种布局:
pack布局
grid布局
place布局
# pack布局
import tkinter
base = tkinter.Tk()
btn1 = tkinter.Button(base, text=1, bg='yellow')
btn1.pack(side='left', expand='yes',fill='both', anchor='nw')
btn2 = tkinter.Button(base,text=2)
btn2.pack(side='bottom', expand='no',fill='y', anchor='sw' )
btn3 = tkinter.Button(base,text=3)
btn3.pack(side='top', expand='yes',fill='both', anchor='n')
btn4 = tkinter.Button(base,text=4)
btn4.pack(side='right', expand='yes',fill='both',)
btn5 = tkinter.Button(base,text=5)
btn5.pack(side='left', expand='yes',fill='both',)
btn6 = tkinter.Button(base,text=6)
btn6.pack(side='left', expand='yes',fill='both',)
base.mainloop()
# grid布局
import tkinter
base = tkinter.Tk()
lb1 = tkinter.Label(base, text='账号:')
lb1.grid(row=0, sticky='w')
en = tkinter.Entry(base)
en.grid(row=0, column=1, sticky='e')
lb2 = tkinter.Label(base, text='密码:')
lb2.grid(row=1, sticky='w')
en = tkinter.Entry(base)
en.grid(row=1, column=1, sticky='e')
btn = tkinter.Button(base, text='登录').grid(row=2,column=1,sticky='e')
base.mainloop()
# 消息机制
import tkinter
def baselabel(event):
global base
lb = tkinter.Label(base, text='i love python')
lb.pack()
base = tkinter.Tk()
lb = tkinter.Label(base, text='模拟按钮')
# label绑定相应的消息和处理函数
# 自动获取左键点击,并启动相应的处理函数baseLabel
lb.bind('' , baselabel)
lb.pack()
base.mainloop()
import tkinter
# 登录模拟
def reg():
# 从输入框中获取用户输入消息
name = en1.get()
pwd = en2.get()
t1 = len(name)
t2 = len(pwd)
if name == 'admin' and pwd == 'password':
lb3['text'] = '登录成功'
else:
lb3['text'] = '用户名或密码错误'
# 输入框删除掉用户输入的内容
# 注意delete的两个参数,表示从第几个删除到第几个
en1.delete(0,t1)
en2.delete(0,t2)
base = tkinter.Tk()
lb1 = tkinter.Label(base, text='账号:')
lb1.grid(row=0, sticky='w')
en1 = tkinter.Entry(base)
en1.grid(row=0, column=1, sticky='e')
lb2 = tkinter.Label(base, text='密码:')
lb2.grid(row=1, sticky='w')
en2 = tkinter.Entry(base)
en2.grid(row=1, column=1, sticky='e')
en2['show'] = '*'
btn = tkinter.Button(base, text='登录', command=reg)
btn.grid(row=2, column=1,sticky='e')
lb3 = tkinter.Label(base, text='')
lb3.grid(row = 3)
base.mainloop()
import tkinter
base = tkinter.Tk()
menubar = tkinter.Menu(base)
for item in ['File', 'Edit', 'View', 'About']:
menubar.add_command(label=item)
base['menu'] = menubar
base.mainloop()
import tkinter
base = tkinter.Tk()
menubar = tkinter.Menu(base)
emenu = tkinter.Menu(menubar)
for item in ['Copy', 'Past', 'Cut']:
emenu.add_separator()
emenu.add_command(label=item)
menubar.add_cascade(label='File')
menubar.add_cascade(label='Edit', menu=emenu)
menubar.add_cascade(label='About')
base['menu'] = menubar
base.mainloop()
import tkinter
def makeLabel():
global base
lb1 = tkinter.Label(base, text='I Love Python').pack()
base = tkinter.Tk()
menubar = tkinter.Menu(base)
for x in ['香菇鸡块', '蒜苔腊肉', '东坡肘子']:
menubar.add_separator()
menubar.add_command(label=x)
menubar.add_command(label='麻辣香锅', command=makeLabel)
# 事件处理函数一定要至少有一个参数,且第一个参数表示的是系统事件
def pop(event):
# 注意使用 event.x 和 event.x_root的区别
#menubar.post(event.x_root, event.y_root)
menubar.post(event.x_root, event.y_root)
base.bind('' , pop)
base.mainloop()
import tkinter
base = tkinter.Tk()
cvs = tkinter.Canvas(base, width=300, height=200)
cvs.pack()
cvs.create_line(23,23, 190,234)
cvs.create_text(56,67, text='I Love Python')
base.mainloop()
import tkinter
import math as m
base = tkinter.Tk()
w = tkinter.Canvas(base, width=300, height=300, bg='black')
w.pack()
center_x = 150
center_y = 150
r = 150
points = [
#左上点
center_x - int(r * m.sin(2 * m.pi / 5)),
center_y - int(r * m.cos(2 * m.pi / 5)),
#右上点
center_x + int(r * m.sin(2 * m.pi / 5)),
center_y - int(r * m.cos(2 * m.pi / 5)),
#左下点
center_x - int(r * m.sin( m.pi / 5)),
center_y + int(r * m.cos( m.pi / 5)),
#顶点
center_x,
center_y - r,
#右下点
center_x + int(r * m.sin(m.pi / 5)),
center_y + int(r * m.cos(m.pi / 5)),
]
# 创建一个多边形
w.create_polygon(points, outline='white', fill='red')
w.create_text(150,150, text="五角星")
base.mainloop()
import tkinter
base = tkinter.Tk()
def btnClick(event):
global w
w.move(id_ball, 10,5)
w.move("fall", 2,7)
w = tkinter.Canvas(base, width=500, height=400)
w.pack()
w.bind("" , btnClick)
# 创建组件后返回id
id_ball = w.create_oval(20,20, 50,50, fill="green")
# 创建组件使用tag属性
w.create_text(123,56, fill="red", text="ILovePython", tag="fall")
# 创建的时候如果没有指定tag可以利用addtag_withtag添加
# 同类函数还有 addtag_all, addtag_above, addtag_xxx等等
id_rectangle = w.create_rectangle(56,78,173,110, fill="gray")
w.addtag_withtag("fall", id_rectangle)
base.mainloop()