1. 程式人生 > >Python GUI之tkinter概述

Python GUI之tkinter概述

Python3 tkinter系列

  • 對於稍有GUI程式設計經驗的人來說,Python的Tkinter介面庫都是非常簡單的。Python的GUI庫非常多,之所以選擇Tkinter,一是最為簡單,二是自帶庫,不需下載安裝,隨時使用,三則是從需求出發的,Python作為一種指令碼語言,一種膠水語言,我不覺得哪個公司會用它開發複雜的桌面應用,無論怎麼看也不具備優勢吧,我使用Python,是把它作為一個靈活小巧的工具,並不是作為主要開發語言,那麼在工作中,需要製作一個小工具,肯定是需要有介面的,不僅自己用,也能分享別人使用,在這種需求下,Tkinter是足夠勝任的!這篇文章主要做一個簡單概述,對於從沒有接觸過GUI的人,在腦中樹立一個基本的介面程式設計概念。

  • 對於tkinter程式設計,我主要用兩個比喻來描述。

    • 第一個,作畫。我們都見過美術生寫生的情景,先支一個畫架,放上畫板,蒙上畫布,構思內容,用鉛筆畫草圖,組織結構和比例,調色盤調色,最後畫筆勾勒。相應的,對應到tkinter程式設計,那麼我們的顯示屏就是支起來的畫架,根窗體就是畫板,tkinter中則是Toplevel,畫布就是tkinter中的容器,對應Frame,畫板上可以放很多張畫布,tkinter中的容器中也可以放很多個容器,繪畫中的構圖佈局則是tkinter中的佈局管理器(幾何管理器),繪畫的內容就是tkinter中的一個個小元件,一幅畫由許多元素構成,而我們的GUI介面,就是有一個個元件拼裝起來的,它們就是widget。
    • 第二個比喻,我們小時候都玩過積木,只要發揮創意,相同的積木可以堆出各種造型。tkinter的元件也可以看做一個個積木,形狀或許不同,其本質都是一樣的,就是一個積木,不管它長什麼樣子,它始終就是積木!所以這些小元件都有許多共性,另外,我個人認為,學習介面程式設計,最重要的不是一開始學習每個積木的樣子,不是學習每個元件怎麼用,而是這些元件該怎麼放。初始學習中,怎麼放遠遠比怎麼用重要的多。而我看到網上大量的文章資料,全是介紹元件怎麼用的,對於怎麼放,也就是tkinter中的佈局管理器,都是一筆帶過,我覺得這對初學者簡直是 本末倒置,或許絕大部分是轉載的原因吧,極少是自己真正寫的。元件怎麼用不是最迫切的,用到的時候再去了解也不遲,邊用邊學反而更好。因此我將專門寫一章,詳細介紹佈局管理器的使用。

    元件關係:
    這裡寫圖片描述

Tkinter 模組元素簡要說明

tkinter 類 元素 簡要說明
Frame 框架 用來承載放置其他GUI元素,就是一個容器
Label 標籤 用於顯示不可編輯的文字或圖示
Button 按鈕 點選時執行一個動作
Entry 單行文字框 顯示一行文字
Text 多行文字框 顯示多行文字
Checkbutton 複選框 允許使用者選擇或反選一個選項
Radiobuttion 單選框 允許使用者從多個選項中選取一個
Canvas 畫布 提供繪圖功能(直線、橢圓、多邊形、矩形) 可以包含圖形或點陣圖
Listbox 列表框 一個選項列表,使用者可以從中選擇
Menu 選單 點下選單按鈕後彈出的一個選項列表,使用者可以從中選擇
Menubutton 選單按鈕 用來包含選單的元件(有下拉式、層疊式等等)
Message 訊息框 類似於標籤,但可以顯示多行文字
Scale 進度條 線性“滑塊”元件,可設定起始值和結束值,會顯示當前位置的精確值
Scrollbar 滾動條 對其支援的元件(文字域、畫布、列表框、文字框)提供滾動功能
Toplevel 頂層 類似框架,為其他的控制元件提供單獨的容器
Spinbox 輸入控制元件 與Entry類似,但是可以指定輸入範圍值
PanedWindow 窗口布局管理 是一個窗口布局管理的外掛,可以包含一個或者多個子控制元件。
LabelFrame 容器控制元件 是一個簡單的容器控制元件。常用與複雜的窗口布局
messageBox 訊息框 用於顯示你應用程式的訊息框。(Python2中為tkMessagebox)

下面建立了第一個GUI程式,執行程式碼可以感受一下

from tkinter import *

#建立根視窗
root = Tk()
#設定視窗標題
root.title("Hello")
#設定視窗大小
root.geometry("300x200")
#在窗體中建立一個框架,用它來承載其他小部件
app = Frame(root)
#設定佈局管理器
app.grid()

label = Label(app,text="hello word!")
label.grid()

btn = Button(app)
btn.grid()

#小部件的任何選項都可以通過configure()方法操作
btn.configure(text = "click")

root.mainloop();

tkinter介面程式設計的時候,首先需要弄清楚的一點就是層次關係,解決怎麼放之前,你應該解決放哪裡的問題。就我個人的理解,GUI程式設計就是程式設計師在作一副畫,這一筆畫在哪裡你應該心中有數。
上面的程式碼中,首先獲得了我們的畫板,也就是根窗體root,然後又建立了一個容器Frame,也就是我們的畫布,在建立Frame時,我們很清楚畫布必須放在畫板上面,所以傳入了一個引數root,通常所有的tkinter元件例項化時,第一個引數都是指定父控制元件,就是表示自己放哪裡。如Label和Button,指定放在Frame上面。

絕大部分控制元件共享屬性:

選項(別名) 說明 單位 典型值 沒有此屬性的控制元件
background(bg) 當控制元件顯示時,給出的正常顏色 color ‘gray25’
‘#ff4400’
borderwidth(bd) 設定一個非負值,該值顯示畫控制元件外圍3D邊界的寬度;(特別的由relief選項決定這項決定).控制元件內部的3D效果也可以使用該值,該值可以是Tkinter(Tk_GetPixels)接受的任何格式 pixel 3
cursor 指定控制元件使用的滑鼠游標,該值可以是Tkinter(Tk_GetPixels)接受的任何格式 cursor gumby
font 指定控制元件內部文字的字型 font ‘Helvetica’ Canvas Frame
(‘Verdana’,8) Scrollbar
Toplevel
foreground(fg) 指定控制元件的前景色 color ‘black’ Canvas Frame
‘#ff2244’ Scrollbar
Toplevel
highlightbackground 指出經過沒有輸入焦點的控制元件加亮區域顏色 color ‘gray30’ Menu
highlightcolor 指出經過沒有輸入焦點的控制元件周圍長方區域加亮顏色 color ‘royalblue’ Menu
highlightthickness 設定一個非負值,該值指出一個有輸入焦點的控制元件周圍加亮方形區域的寬度,該值可以是 Tk_GetCursor)接受的任何格式.如果為0,則不畫加亮區域 pixel 2.1m Menu
relief 指出控制元件3D效果,可選值為RAISED,SUNKEN,FLAT,RIDGE,SOLID,GROOVE.該值指出控制元件內部相對於外部的外觀樣式,比如RAISED意味著控制元件內部相對於外部突出 constant RAISED
GROOVE
takefocus 決定視窗在鍵盤遍歷時是否接收焦點(比如Tab,shift-Tab).在設定焦點到一個視窗之前,遍歷指令碼檢查takefocus選項的值,值0意味著鍵盤遍歷時完全跳過,值1意味著只要有輸入焦點(它及所有父代都對映過)就接收.空值由指令碼自己覺定是否接收,當前的演算法是如果視窗被禁止,或者沒有鍵盤捆綁或視窗不可見時,跳過 boolean 1 YES
width 指定一個整數,設定控制元件寬度,控制元件字型的平局字元數.如果值小於等於0,控制元件選擇一個能夠容納目前字元的寬度 integer 32 Menu

多控制元件共享屬性:

選項(別名) 說明 單位 典型值 僅此類控制元件
activebackground 指定畫活動元素的背景顏色.元素(控制元件或控制元件的一部分)在滑鼠放在其上並按動滑鼠按鈕引起某些行為的發生時,是活動的.如果嚴格的Modf一致性請求通過設定tk_strictModf變數完成,該選項將被忽略,正常背景色將被使用.對Windows和Macintosh系統,活動顏色將只有在滑鼠按鈕1被按過元素時使用 color ‘red’ Button
‘#fa07a3’ Checkbutton
Menu
Menubutton
Radiobutton
Scale
Scrollbar
activeforeground 指定畫活動元素時的前景顏色.參見上面關於活動元素的定義 color ‘cadeblue’ Button
Menu
Checkbutton
Menubutton
Radiobutton
anchor 指出控制元件資訊(比如文字或者點陣圖)如何在控制元件中顯示.必須為下面值之一: constant Button
N,NE,E,SE,S,SW,W,NW或者CENTER.比如NW(NorthWest)指顯示資訊時使左上角在控制元件的左上端 Checkbutton
Label
Message
Menubutton
Radiobutton
bitmap 指定一個位圖在控制元件中顯示,以Tkinter(Tk_GetBitmap)接受的任何形式.點陣圖顯示的精確方式受其他選項如錨或對齊的影響.典型的,如果該選項被指定,它覆蓋指定顯示控制元件中文字的其他選;bitmap選項可以重設為空串以使文字能夠被顯示在控制元件上.在同時支援點陣圖和影象的控制元件中,影象通常覆蓋點陣圖 bitmap Button
Checkbutton
Label
Menubutton
Radiobutton
command 指定一個與控制元件關聯的命令.該命令通常在滑鼠離開控制元件之時被呼叫,對於單選按鈕和多選按鈕,tkinter變數(通過變數選項設定)將在命令呼叫時更新 command setupData Button
Checkbutton
Radiobutton
Scale
Scrollbar
disabledforeground 指定繪畫元素時的前景色.如果選項為空串(單色顯示器通常這樣設定),禁止的元素用通常的前景色畫,但是採用點刻法填充模糊化 color ‘gray50’ Button
Checkbutton
Radiobutton
Menu
Menubutton
height 指定視窗的高度,採用字型選項中給定字型的字元高度為單位,至少為1 integer 14 Button
Canvas
Frame
Label
Listbox
Checkbutton
Radiobutton
Menubutton
Text
Toplevel
image 指定所在控制元件中顯示的影象,必須是用影象create方法產生的.如果影象選項設定,它覆蓋已經設定的點陣圖或文字顯示;更新恢復點陣圖或文字的顯示需要設定影象選項為空串 image Button
Checkbutton
Label
Menubutton
Radiobutton
justify 當控制元件中顯示多行文字的時候,該選項設定不同行之間是如何排列的,其值為如下之一: constant RIGHT Button
LEFT,CENTER或RIGHT.LEFT指每行向左對齊,CENTER指每行居中對齊,RIGHT指向右對齊 Checkbutton
Entry
Label
Menubutton
Message
Radiobutton
padx 指定一個非負值設定控制元件X方向需要的邊距.該值為Tkinter(Tk_GetPixels)接受的格式.當計算需要多大的視窗時,控制元件會把此值加到正常大小之上(由控制元件中顯示內容決定);如果幾何管理器能夠滿足此請求,控制元件將在左端或右端得到一個給定的多餘空邊.大部分控制元件只用此項於文字,如果它們顯示點陣圖或影象,通常忽略空邊選項 pixels 2m10 Button
Checkbutton
Label
Menubutton
Message
Radiobutton
Text
pady 指定一個非負值設定控制元件Y方向需要的邊距.該值為Tkinter(Tk_GetPixels)接受的格式.當計算需要多大的視窗時,控制元件會把此值加到正常大小之上(由控制元件中顯示內容決定);如果幾何管理器能夠滿足此請求,控制元件將在上端或下端得到一個給定的多餘空邊.大部分控制元件只用此項於文字,如果它們顯示點陣圖或影象,通常忽略空邊選項 pixels 123m Button
Checkbutton
Label
Menubutton
Message
Radiobutton
Text
selectbackground 指定顯示選中項時的背景顏色 color blue Canvas
Listbox
Entry
Text
selectborderwidth 指定一個非負值,給出選中項的三維邊界寬度,值可以是任何 pixel 3 Canvas
Tkinter(Tk_GetPixels)接受的格式 Entry
Listbox
Text
selectforeground 指定顯示選中項的前景顏色 color yellow Canvas
Entry
Listbox
Text
state 指定控制元件下列兩三個狀態之一(典型是複選按鈕): constant ACTIVE Button
NORMAL和DISABLED或NORMAL,ACTIVE和NORMAL.在NORMAL狀態,控制元件有前景色和背景顯示;在ACTIVE狀態,控制元件按activeforeground和activebackground選項顯示;在DISABLED狀態下,控制元件不敏感,預設捆綁將拒絕啟用控制元件,並忽略滑鼠行為,此時,由disabledforeground和background選項決定如何顯示 Checkbutton
Entry
Menubutton
Scale
Radiobutton
Text
text 指定控制元件中顯示的文字,文字顯示格式由特定控制元件和其他諸如錨和對齊選項決定 string ‘Display’ Button
Checkbutton
Label
Menubutton
Message
Radiobutton
textvariable 指定一個變數名字.變數值被轉變為字串在控制元件上顯示.如果變數值改變,控制元件將自動更新以反映新值,字串顯示格式由特定控制元件和其他諸如錨和對齊選項決定 variable widgetConstant Button
Checkbutton
Entry
Label
Menubutton
Message
Radiobutton
underline 指定控制元件中加入下劃線字元的整數索引.此選項完成選單按鈕與選單輸入的鍵盤遍歷預設捆綁.0對應控制元件中顯示的第一個字元,1對應第二個,以此類推 integer 2 Button
CheckButton
Label
Menubutton
Radiobutton
wraplength 對於能夠支援字元換行的控制元件,該選項指定行的最大字元數,超過最大字元數的行將轉到下行顯示,這樣一行不會超過最大字元數.該值可以是視窗距離的任何標準格式.如果該值小於或等於0,不換行,換行只有在文字中的換行符的地方才出現 pixel 41,65 Button
Checkbutton
Label
Menubutton
Radiobutton
xscrollcommand 指定一個用來與水平滾動框進行資訊交流的命令字首,當控制元件視窗檢視改變(或者別的任何滾動條顯示的改變,如控制元件的總尺寸改變等等),控制元件將通過把滾動命令和兩個數連線起來產生一個命令.兩個數分別為0到1之間的分數,代表文件中的一個位置,0表示文件的開頭,1.0表示文件的結尾處,0.333表示整個文件的三分之一處,如此等等.第一個分數代表視窗中第一個可見文件資訊,第二個分數代表緊跟上一個可見部分之後的資訊.然後命令把它們傳到Tcl直譯器執行. function Canvas
典型的,xscrollcommand選項由滾動條標識跟著set組成,如set.x.scrollbarset將引起滾動條在視窗中檢視變化時被更新.如果此項沒有指定,不執行命令 Entry
Listbox
Text
yscrollcommand 指定一個用來與垂直滾動框進行資訊交流的命令字首,當控制元件視窗檢視改變(或者別的任何滾動條顯示的改變,如控制元件的總尺寸改變等等),控制元件將通過把滾動命令和兩個數連線起來產生一個命令.兩個數分別為0到1之間的分數,代表文件中的一個位置,0表示文件的開頭,1.0表示文件的結尾處,0.333表示整個文件的三分之一處,如此等等.第一個分數代表視窗中第一個可見文件資訊,第二個分數代表緊跟上一個可見部分之後的資訊.然後命令把它們傳到Tcl直譯器執行. function Canvas
典型的,yscrollcommand選項由滾動條標識跟著set組成,如set.y.scrollbarset將引起滾動條在視窗中檢視變化時被更新.如果此項沒有指定,不執行命令 Entry
Listbox
Text

相關推薦

Python GUItkinter概述

Python3 tkinter系列 對於稍有GUI程式設計經驗的人來說,Python的Tkinter介面庫都是非常簡單的。Python的GUI庫非常多,之所以選擇Tkinter,一是最為簡單,二

Python:GUItkinter學習筆記2界面布局顯示

lB cfi ipa die uia 是否 打包 top adp 相關內容: pack 介紹 常用參數 使用情況 常用函數 grid 介紹 常用參數 使用情況 常用函數 place 介紹 常用參數 使用情況 常用函數 首發時間:2

Python:GUItkinter學習筆記messagebox、filedialog

files try OS line pad 錯誤 mes false erro 相關內容: messagebox 介紹 使用 filedialog 介紹 使用 首發時間:2018-03-04 22:18 messagebox: 介紹:mes

Python:GUItkinter學習筆記3事件綁定(轉載自https://www.cnblogs.com/progor/p/8505599.html)

borde proto mes level 字符串 from .com 當前 控件 相關內容: command bind protocol 首發時間:2018-03-04 19:26 command: command是控件中的一個參數,如果使得comma

Python:GUItkinter學習筆記3事件繫結(轉載自https://www.cnblogs.com/progor/p/8505599.html) Python:GUItkinter學習筆記3事件繫結

Python:GUI之tkinter學習筆記3事件繫結   相關內容: command bind protocol   首發時間:2018-03-04 19:26   command:

Python GUItkinter視窗視窗教程大集合(看這篇就夠了)

  Tkinter支援16個核心的視窗部件,這個16個核心視窗部件類簡要描述如下: Button:一個簡單的按鈕,用來執行一個命令或別的操作。 Canvas:組織圖形。這個部件可以用來繪製圖表和圖,建立圖形編輯器,實現定製視窗部件。 Checkbutton:代表一個變數,它有兩個不同的值。點選這個按鈕將會在

Python GUItkinter佈局管理

Python3 tkinter系列 所謂佈局,就是指控制窗體容器中各個控制元件(元件)的位置關係。tkinter 共有三種幾何佈局管理器,分別是:pack佈局,grid佈局,place佈局。

Python GUI程式設計 Tkinter (一)

Tkinter 是Python內建的一個 頁面程式設計的一個庫。 一、匯入tkinter from tkinter import * 二、頁面程式設計首先需要建立一個視窗 # 將tkinter 物件例項化 root = Tk() # 設定視窗標題 root.title('視窗標題

Python GUI Treeview 學習

寬度 imp columns expand item 添加 pro comm tails 例子1 from tkinter import *import tkinter.ttk as ttk win = Tk()win.title("Treeview 學習") col =

Python基礎筆記_Day14_Python圖形化介面、Python GUItkinterPython英漢詞典

Day14_Python圖形化介面、Python GUI、tkinter、Python英漢詞典 14.01_Python語言基礎(Python實現英漢字典)(掌握) 14.02_Python語言基礎(tkinter概述)(熟練) 14.03_Python語言基礎(建立一個圖形化介面)(熟

關於python GUI程式設計(Tkinter) 建立子視窗及在視窗上用圖片繪圖

  注意主視窗一定要為tk.Tk(),在主視窗上通過button的點選相應子函式建立子視窗,注意此時創建出來的視窗必須是Toplevel,否則出錯。至於用圖片在視窗上繪圖,則按程式碼所示即可。 # -*- coding: utf-8 -*- """ Created on

Python GuiTkinter 的入門學習

一、前面的話 Python 提供了多個圖形開發介面的庫,幾個常用 Python GUI 庫如下: Tkinter: Tkinter 模組(Tk 介面)是 Python 的標準 Tk GUI 工具包的介面 .Tk 和 Tkinter 可以在大多數的 Unix 平臺下使用

python GUI程式設計(Tkinter)簡單使用

在介面中很重要的是佈局,一開始在查詢的的時候網上有很多都是下面這樣: # -*- coding: utf-8 -*- from Tkinter import * root = Tk() # 設定位置窗體長x寬+x座標+y座標 root.geometry('80x80+1

python GUI編程tkinter示例目錄樹遍歷工具

容器 string類型 現象 指定 red () 使用 import 信息 摘錄 python核心編程 本節我們將展示一個中級的tkinter應用實例,這個應用是一個目錄樹遍歷工具:它會從當前目錄開始,提供一個文件列表,雙擊列表中任意的其他目錄,就會使得工具切換到新目錄中,

Python GUI程式設計tkinter入門案例--簡單的自動檔案下載器

利用Python3.6開發了一個簡易版的檔案批量下載軟體demo,使用的GUI工具是tkinter。預設開啟桌面的資料夾,可以實現自動讀取文字檔案中的檔案超連結,實現自動下載到桌面。 最近在整理自己磁碟檔案時,發現很多下載的檔案,如果只保留一個下載的超連結,這樣

Pytkinterpython最簡單的猜字小遊戲帶你進入pythonGUI世界

from tkinter import *  import tkinter.simpledialog as dl  import tkinter.messagebox as mb    root = Tk()   w = Label(root, text = "Guess N

Python-GUI程式設計 Tkinter 與 記事本實現心得

在這裡介紹一下tkinter和我的記事本,同時分享一些方便自學python的網站 引用一句老外的話讓自己顯得高大上一些: MythDebunking: TkInter is ugly on Windows (http://wiki.tcl.tk/864

python服務器文件上傳下載+GUItkinter

pat com 方法 __main__ mat 服務器 rom 練手 scl 大概就是一個通過應用程序來和服務器打交道的這麽一個,小東西 1.GUI 用的是tkinter 1 # -*- coding: UTF-8 -*- 2 from tkinter impor

Python日記——利用Tkinter學習GUI設計

區間 entry 滾動條 spinbox 應用程序 窗口 root ssa 框架 2017.12.28 首先介紹一下Tkinter用到的各類組件及標準屬性: 組件: Button 按鈕控件;在程序中顯示按鈕。 Canvas 畫布控件;顯示圖形元素如線條或文本

Python GUI編程(tkinter)

3.x idl 用戶界面 wing code 方便 tkinter window 軟件 Python 提供了多個圖形開發界面的庫,幾個常用 Python GUI 庫如下: Tkinter: Tkinter 模塊(Tk 接口)是 Python 的標準 Tk GU