消息机制(联系前端和后端的消息)
-自动发出事件
-有系统将消息发送放到队列
-由相关的组件进行绑定/设置
-后端自动选择感兴趣的事件并作出相应的反应
消息的格式
-<[modifier-]—type-[-detail]>
:表示一个按钮事件,1代表鼠标左键,2代表中建
:键盘A键位
Tkinter的绑定
-bind_all:全局范围的绑定,默认是全局快捷键,比如F1是帮助文档
-bind_class:接受三个参数,第一个是类名,第二个是事件,第三个式操作
-w.bind_class(“Entry”,"",my_func)
-bind:单独对一个个实例绑定
-unbind:解绑,需要解绑那个事件作为参数
#消息机制的简单实例
import tkinter
def baselabel(event):
global baseFrame
lb=tkinter.Label(baseFrame,text='谢谢点击')
lb.grid(row=0,column=1)
#画出程序的总框架
baseFrame=tkinter.Tk()
#label绑定相应的消息和处理函数
#自动获取左键点击消息,并启动baselabel函数
lb=tkinter.Label(baseFrame,text='模拟按钮')
lb.bind("<Button-1>",baselabel)
lb.grid(row=0,column=0)
#启动消息循环
baseFrame.mainloop()
Entry
输入框
entry[“show”]="*",设置遮挡字符
# -*-coding: UTF-8 -*-
# @Time:2018/12/1719:14
# @author superxjz
# @func
import tkinter
def reg():
#获取用户的输入
name=e1.get()
pwd=e2.get()
#计算输入的长度
t1=len(name)
t2=len(pwd)
if name=='111' and pwd=='222':
lb3['text']="登陆成功"
else:
lb3['text']="用户名或密码错误"
#删除用户的输入
#两个参数是位置
e1.delete(0,t1)
e2.delete(0,t2)
baseFrame=tkinter.Tk()
lb1=tkinter.Label(baseFrame,text="name")
lb1.grid(row=0,column=0,stick=tkinter.W)
e1=tkinter.Entry(baseFrame)
e1.grid(row=0,column=1,stick=tkinter.W)
lb2=tkinter.Label(baseFrame,text="pwd")
lb2.grid(row=1,column=0,stick=tkinter.W)
e2=tkinter.Entry(baseFrame)
e2.grid(row=1,column=1,stick=tkinter.W)
e2["show"]='*'
btn=tkinter.Button(baseFrame,text='登陆',command=reg)
btn.grid(row=2,column=1,stick=tkinter.W)
lb3=tkinter.Label(baseFrame,text=" ")
lb3.grid(row=3)
baseFrame.mainloop()
菜单
普通菜单
-第一个Menu类定义的是parent
-add_command添加菜单项,如果菜单是顶层菜单,则从左向右添加,否则就是下拉菜单
-label:指定菜单项名称
-command:点击后相应的调用函数
-acceletor:快捷键
-underline:制定是否菜单信息下有横线
-menu:属性指定使用哪一个作为顶级菜单
import tkinter
baseFrame=tkinter.Tk()
menubar=tkinter.Menu(baseFrame)
for item in ['file','edit','view','about']:
menubar.add_command(label=item)
baseFrame['menu']=menubar
baseFrame.mainloop()
级联菜单
-add_cascade:级联菜单,作用是引出后面的菜单
-add_cascade的menu属性:指明把菜单级联到哪个菜单上
-label:名称
-菜单建立过程:1-建立menu实例,2-add_command,3-add_cascade
import tkinter
baseFrame=tkinter.Tk()
#定义了一个菜单
menubar=tkinter.Menu(baseFrame)
#又定义了一个菜单
emenu=tkinter.Menu(menubar)
#给emenu菜单名字赋值
for item in ['copy','past','cut']:
emenu.add_command(label=item)
menubar.add_cascade(label='file')
#给名字叫做edit的菜单标签关联emenu菜单
menubar.add_cascade(label='edit',menu=emenu)
menubar.add_cascade(label='about')
baseFrame['menu']=menubar
baseFrame.mainloop()
弹出式菜单
弹出菜单也叫上下文菜单
设置过程:1-建立菜单并向菜单添加各种功能2-监听鼠标右键3-如果点击右键,则根据位置判断弹出4-调用Menu的pop方法
add_separator:添加分隔符
import tkinter
def makelabel():
global baseFrame
tkinter.Label(baseFrame,text='人生苦短,我用python').pack()
baseFrame=tkinter.Tk()
menubar=tkinter.Menu(baseFrame)
for i in ['麻辣香锅','地锅鸡','东坡肘子']:
menubar.add_separator()
menubar.add_command(label=i)
menubar.add_command(label='火锅',command=makelabel)
#事件处理函数一定至少有一个参数,且第一个参数表示系统事件
def pop(event):
menubar.post(event.x_root,event.y_root)
baseFrame.bind('<Button-3>',pop)
baseFrame.mainloop()
canvas 画布
在画布上绘制对象那个,通常用create_name,name=对象类型
画布是把一定的组件显示出来
每次使用谁返回一个创建组件的id,同时也可以用tag属性指定其标签
canvas.move():把标签或者id移动到指定的位置
import tkinter
base=tkinter.Tk()
cv=tkinter.Canvas(base,width=300,height=200)
cv.pack()
#代表两个点
#参数的单位是px
cv.create_line(22,22, 190,200)
cv.create_text(30,30, text='harbin')
base.mainloop()