Python-GUI(2)

消息机制(联系前端和后端的消息)

-自动发出事件
-有系统将消息发送放到队列
-由相关的组件进行绑定/设置
-后端自动选择感兴趣的事件并作出相应的反应

消息的格式
-<[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()

猜你喜欢

转载自blog.csdn.net/qq_41609475/article/details/85056147