消息機制(聯繫前端和後端的消息)
-自動發出事件
-有系統將消息發送放到隊列
-由相關的組件進行綁定/設置
-後端自動選擇感興趣的事件並作出相應的反應
消息的格式
-<[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()