Python 編程之Tkinter的使用01

Snip20180620_1.png

  • 原文博客連接地址
  • Python提供了多個圖形開發界面的庫,幾個經常使用Python GUI庫以下:
  • TkinterTkinter模塊(Tk 接口)是Python的標準 Tk GUI 工具包的接口.TkTkinter能夠在大多數的Unix平臺下使用, 一樣能夠應用在WindowsMacintosh系統裏。Tk8.0的後續版本能夠實現本地窗口風格,並良好地運行在絕大多數平臺中。
  • wxPythonwxPython是一款開源軟件,是Python語言的一套優秀的GUI圖形庫,容許Python程序員很方便的建立完整的、功能健全的GUI用戶界面。
  • JythonJython程序能夠和Java無縫集成。除了一些標準模塊,Jython使用Java的模塊。Jython 幾乎擁有標準的Python中不依賴於C 語言的所有模塊。好比,Jython的用戶界面將使用 SwingAWT或者SWTJython 能夠被動態或靜態地編譯成Java字節碼

一. Tkinter介紹

  • TkinterPython的標準GUI庫。Python使用 Tkinter能夠快速的建立GUI應用程序。
  • 因爲Tkinter是內置到python的安裝包中、只要安裝好Python以後就能import Tkinter庫、並且IDLE也是用Tkinter編寫而成、對於簡單的圖形界面Tkinter仍是能應付自如

須要注意: Python3.x版本使用的庫名爲 tkinter,即首寫字母T爲小寫前端

import tkinter
複製代碼
  • 建立一個GUI程序
    • 一、導入tkinter模塊
    • 二、建立控件
    • 三、指定這個控件的master,即這個控件屬於哪個
    • 四、告訴GM(geometry manager)有一個控件產生了

1. 主窗口

  • iOS中每個APP都有一個主窗口window, 該window就是全部視圖嘴地城最基礎的視圖View
  • Python中童謠也會有一個主窗口, 下面看一下tkinter生成主窗口的方法
# 主窗口
import tkinter

# 建立主窗口
window = tkinter.Tk()

# 設置標題
window.title('Titanjun')

# 設置窗口大小
window.geometry('400x400')

# 進入消息循環
window.mainloop()
複製代碼

效果以下python

Snip20180620_5.png

主窗口除了上述方法以外還有如下方法程序員

# 框體大小的可調性, 分別表示x, y方向的可變性
window.resizable(0, 0)

# 退出
window.quit()

# 刷新頁面
window.update()
複製代碼

二. Tkinter組件

  • Tkinter的提供各類控件,如按鈕,標籤和文本框,一個GUI應用程序中使用, 這些控件一般被稱爲控件或者部件
  • 目前有15種Tkinter的部件, 下面是對這些部件以及一個簡短的介紹
控件 描述
Label 標籤控件, 能夠顯示文本和位圖
Button 按鈕控件, 在程序中顯示按鈕
Entry 輸入控件;用於顯示簡單的文本內容
Checkbutton 多選框控件;用於在程序中提供多項選擇框
Frame 框架控件;在屏幕上顯示一個矩形區域,多用來做爲容器
Canvas 畫布控件;顯示圖形元素如線條或文本
Listbox 列表框控件;在Listbox窗口小部件是用來顯示一個字符串列表給用戶
Menubutton 菜單按鈕控件,因爲顯示菜單項。
Menu 菜單控件;顯示菜單欄,下拉菜單和彈出菜單
Message 消息控件;用來顯示多行文本,與label比較相似
Radiobutton 單選按鈕控件;顯示一個單選的按鈕狀態
Scale 範圍控件;顯示一個數值刻度,爲輸出限定範圍的數字區間
Scrollbar 滾動條控件,當內容超過可視化區域時使用,如列表框
Text 文本控件;用於顯示多行文本
Spinbox 輸入控件;與Entry相似,可是能夠指定輸入範圍值
PanedWindow 一個窗口布局管理的插件,能夠包含一個或者多個子控件
LabelFrame 一個簡單的容器控件, 經常使用與複雜的窗口布局
tkMessageBox 用於顯示你應用程序的消息框

若是以前作過H5前端開發或者iOS等頁面相關開發工做的, 應該能到, 其實這些組件和其餘開發語言提供的組件功能類似, 屬性也相似, 下面咱們先看一下一些通用的屬性介紹框架

屬性值 屬性描述
bg 控件的背景顏色
fg 組件中的字體顏色
font 設置文本的字體樣式和字號
height 設置控件高度
width 設置控件寬度
bd 設置控件邊框的大小, 默認2個像素
relief 設置邊框樣式, 有falt, sunken, raised, groove, ridge, 默認flat
text 設置文本內容
anchor 瞄點, 控制文本的位置, 默認居中(可選: n北, e東, s南, w西, center居中, ne se, sw, nw)
justify 顯示多行文本的時候,設置不一樣行之間的對齊方式(left, right, center)
wraplength 根據寬度限制控件每行顯示的字符的數量
underline 下劃線, 默認沒有; 取值就是帶下劃線的字符串索引,爲 0 時,第一個字符帶下劃線
padx 在x軸方向上的內邊距(padding),是指控件的內容與控件邊緣的距離
pady 在y軸方向上的內邊距(padding)

1. Label控件

  • Label控件用以顯示文字和圖片.
  • Label一般被用來展現信息, 而非與用戶交互
  • Label也能夠綁定點擊等事件, 只是一般不這麼用
label = tkinter.Label(window,
                      text="我是一隻小鴨子",
                      bg='#999999',
                      fg='white',
                      font=('黑體', 13),
                      justify='center',
                      height=5,
                      width=30,
                      anchor='n',
                      # wraplength=30
                      underline=3,
                      bd=3,
                      relief='flat'
                      )
#顯示出來
label.pack()
複製代碼

顯示效果ide

Label效果.png

部分屬性介紹函數

  • anchor: 文本在空間中的顯示位置(按上北下南, 左西右東規則), 可選值有(n北 e東 s南 w西 center居中 ne西北 se東南 sw西南 nw東北)方向
  • image: 顯示的圖片

2. Button控件

  • Button控件是一個標準的Tkinter小部件,用於各類按鈕, 若是用鼠標點擊按鈕,可能會開始一些操做
  • Button能夠顯示文本和圖片
  • 按鈕只能以單一字體顯示文本, 文本能夠跨越多行
# 設置標題
window.title('Titanjun')

# 設置窗口大小
window.geometry('400x400')

# 建立按鈕
button1 = tkinter.Button(window,
                         text='按鈕1',
                         bg='orange',
                         height=3,
                         width=20,
                         bd=3,
                         relief='sunken',
                         activebackground='orange',
                         activeforeground='white',
                         command=action1
                         )
button1.pack()


button2 = tkinter.Button(window, text='Titanjun', height=3, command=window.quit())
button2.pack()

# 進入消息循環
window.mainloop()
複製代碼

效果樣式工具

Python按鈕.png

部分屬性介紹oop

  • activebackground: 當鼠標放上去時,按鈕的背景色
  • activeforeground: 當鼠標放上去時,按鈕的文本顏色
  • highlightcolor: 要高亮的顏色
  • image: 按鈕上要顯示的圖片
  • state: 設置按鈕組件狀態,可選的有(normal(默認), active, disabled)
  • command: 按鈕的綁定函數方法, 接受一個函數名,注意函數名不要加引號

3. Entry輸入

輸入控件, 用於顯示簡單的文本內容, 和iOS中的UITextField同樣, 示例以下佈局

vari = tkinter.Variable()
entry = tkinter.Entry(window, textvariable=vari)
entry.pack()

# 設置值
vari.set('very good')
# 取值
print(vari.get())
print(entry.get())

# 只讀輸入框
vari2 = tkinter.Variable()
entry2 = tkinter.Entry(window, textvariable=vari2, state='disabled')
entry2.pack()

# 設置值
vari2.set('very bad')
print(vari2.get())

# 密碼輸入框, 不管輸入什麼都顯示密文
vari3 = tkinter.Variable()
entry3 = tkinter.Entry(window, textvariable=vari3, show='@', bg='red', fg='white')
entry3.pack()
複製代碼

效果樣式字體

Python輸入框.png

監聽輸入框內文字的改變

  • 這裏咱們須要經過設置一下三個選項
  • validate: 設置輸入框的監聽狀態
    • focus:當Entry組件得到或失去焦點的時候驗證
    • focusin: 當Entry組件得到焦點的時候驗證
    • focusout: 當Entry組件失去焦點的時候驗證
    • key:當輸入框被編輯的時候驗證
    • all: 當出現上邊任何一種狀況的時候驗證
  • validatecommand: 接受一個判斷輸入框內的文字是否符合要求的函數, 該函數只能返回 True 或 False 表示驗證的結果
  • invalidcommand: 指定的函數只有在validatecommand的返回值爲False的時候才被調用
# 主窗口
import tkinter

# 驗證輸入的文字
def varileText():
    text = entry4.get()
    if text == '1':
        print('對嘍')
        return True
    print('錯漏')
    return False

#
def testInvaild():
    print('invaildCommanf被調用')
    return True

# 建立主窗口
window = tkinter.Tk()
# 設置標題
window.title('Titanjun')
# 設置窗口大小
window.geometry('400x400')


# 驗證輸入的內容是否符合要求
vari4 = tkinter.Variable()
entry4 = tkinter.Entry(window, textvariable=vari4, validate='key', validatecommand=varileText, invalidcommand=testInvaild)
entry4.pack()

# 進入消息循環
window.mainloop()
複製代碼

4. Text多行文本

  • Text文本組件用於顯示和處理多行文本。
  • Tkinter的全部組件中,Text組件顯得異常強大和靈活,它適用於處理多任務
  • 當建立一個Text組件的時候裏面是沒有內容的。爲了給其插入內容,可使用insert()以及INSERTEND索引號

4-1. 插入文本/控件/圖片

text = Text(window, bg='yellow', width=40, height=10)
#INSERT索引表示在光標處插入
text.insert(INSERT,'I Love')
#END索引號表示在最後插入
text.insert(END,' you')
text.pack()

def show():
    print('好了, 你贏了')

# text還能夠插入按鈕 圖片等
b1 = Button(text, text='點我點我', command=show)
# 在text建立組件的命令
text.window_create(INSERT, window=b1)
複製代碼

4-2. 索引值

  • Indexes(索引)是用來指向Text組件中文本的位置,跟python的序列索引同樣,Text的組件索引也是對應實際字符之間的位置
  • 值得注意的是: 行號以1開始 列號以0開始
  • 例如: 2.4表示第2行第4列的字符
from tkinter import *
root = Tk()
text1=Text(root,width=30,height=3)
text1.insert(INSERT,'index的練習')
#1.2到1.5的範圍之間
print(text1.get(1.2,1.5))
複製代碼

4-3. Text中的Tags

Tags一般用於改變Text組件中內容的樣式和功能,你能夠修改文本的字體,尺寸和顏色,另外Tags還容許你將文本、嵌入的組件和圖片與鍵盤相關聯,除了user-defined tags(用戶自定義的Tags)

text.insert(INSERT, '自定義標籤的名字')

#第一個參數爲自定義標籤的名字
#第二個參數爲設置的起始位置,第三個參數爲結束位置
#第四個參數爲另外一個位置
text.tag_add('tag1', '1.7', '1.12', '1.14')

#用tag_config函數來設置標籤的屬性(這裏不要用簡寫, 不然報錯)
text.tag_config('tag1', font=17, background='blue', foreground='red')
# text.tag_config('tag1', bg='yellow', fg='red')
#新的tag會覆蓋舊的tag
複製代碼

4-4. 帶滾動條

text = Text(window, bg='yellow', width=100, height=10)
# 添加右側滾動條
scroll = Scrollbar()
# side放到窗體的那一側 fill填充
scroll.pack(side=RIGHT, fill=Y)
text.pack(side=RIGHT, fill=Y)
# 二者關聯
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)

str = '''致橡樹--舒婷 ..........此處省略N個字........... '''

text.insert(INSERT, str)
複製代碼

效果樣式

滾動Text.png

5. Checkbutton多選按鈕

  • Checkbutton能夠表示兩種狀態:OnOff,能夠設置回調函數,每當點擊此按鈕時回調函數被調用
  • 這裏有一個示例: 選擇不一樣的複選框, 會有不一樣的文本顯示
def update():
    message = ''
    if tag1.get() == True:
        message += 'titan \n'
    if tag2.get() == True:
        message += 'jun \n'
    if tag3.get() == True:
        message += 'coder \n'

    #清除text中的全部內容
    text.delete(0.0, END)
    # 插入新的文本內容
    text.insert(INSERT, message)

# 要綁定的變量
tag1 = BooleanVar()
check1 = Checkbutton(window, text = 'Titan', variable = tag1, command = update)
check1.pack()

tag2 = BooleanVar()
check2 = Checkbutton(window, text = 'Juned', variable = tag2, command = update)
check2.pack()

tag3 = BooleanVar()
check3 = Checkbutton(window, text = 'Coder', variable = tag3, command = update)
check3.pack()


text = Text(window, bg = 'orange', width = 50, height = 5)
text.pack()
複製代碼

效果樣式

puthon複選框.png

6. Radiobutton單選框

Radiobutton爲單選按鈕,即在同一組內只能有一個按鈕被選中,每當選中組內的一個按鈕時,其它的按鈕自動改成非選中態,與其餘控件不一樣的是:它有組的概念

def selectorAction():
    print(tag.get())

# 一組單選框要綁定同一個變量
tag = IntVar()
radio1 = Radiobutton(window, text = 'one', value = 23, variable = tag, command = selectorAction)
radio1.pack()
radio2 = Radiobutton(window, text = 'two', value = 32, variable = tag, command = selectorAction)
radio2.pack()
radio3 = Radiobutton(window, text = 'ten', value = 10, variable = tag, command = selectorAction)
radio3.pack()
複製代碼

效果樣式

python單選框.png

未完待續, 後期會繼續更新其餘控件的相關介紹..........

相關文章
相關標籤/搜索