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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章