0 寫在前面
未經(jīng)允許,不得轉(zhuǎn)載,謝謝~~
畢設(shè)要在現(xiàn)有的基礎(chǔ)上做一個(gè)可視化的界面,所以趁機(jī)也學(xué)習(xí)一波如何用python實(shí)現(xiàn)圖形界面的開發(fā)。
本文主要學(xué)習(xí)并整理了:
- 簡要介紹用于python圖形界面開發(fā)的第三方庫
- 如何利用Tkinter實(shí)現(xiàn)第一個(gè)GUI程序
- 常見的Tkinter組件,以及控件屬性等等
1 第三方庫及Tkinter介紹
第三方庫介紹
python支持多種圖形界面的第三方庫,包括:TK, wxWidgets, Qt, GTK...
在這些第三方庫中,TK是python自帶支持的,不需要安裝額外的開發(fā)軟件,考慮到任務(wù)比較簡單,就打算選擇Tkinter進(jìn)行開發(fā)。
關(guān)于TK以及Tkinter
- Tk是一個(gè)圖形庫,支持多個(gè)操作系統(tǒng),使用Tcl語言開發(fā);
- Tk會調(diào)用操作系統(tǒng)提供的本地GUI接口,完成最終的GUI。
- Python自帶的Tkinter封裝了Tk的接口
- 我們只需要調(diào)用Tkinter提供的接口就可以了。
2 第一個(gè)GUI程序
導(dǎo)入Tkinter的包
from Tkinter import *
從
Frame
中派生一個(gè)類,這是所有Widget
的父容器
class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.createWidgets()
def createWidgets(self):
self.helloLabel = Label(self, text='Hello, world!')
self.helloLabel.pack()
self.quitButton = Button(self, text='Quit', command=self.quit)
self.quitButton.pack()
- 在GUI中,每個(gè)Button、Label、輸入框等,都是一個(gè)
Widget
-
Frame
則是可以容納其他Widget的Widget -
pack()
方法把Widget加入到父容器中,并實(shí)現(xiàn)布局。 -
grid()
可以實(shí)現(xiàn)更復(fù)雜的布局。 - 在
createWidgets()
方法中,我們創(chuàng)建一個(gè)Label
和一個(gè)Button
,當(dāng)Button
被點(diǎn)擊時(shí),觸發(fā)self.quit()
使程序退出。
- 實(shí)例化
Application
,并啟動消息循環(huán)
app = Application()
# 設(shè)置窗口標(biāo)題:
app.master.title('Hello World')
# 主消息循環(huán):
app.mainloop()
- GUI程序的主線程負(fù)責(zé)監(jiān)聽來自操作系統(tǒng)的消息,并依次處理每一條消息。
- 如果消息處理非常耗時(shí),就需要在新線程中處理。
-
運(yùn)行結(jié)果
result
以上展示的就是這一段小代碼運(yùn)行的結(jié)果了。
可以看到TK本身調(diào)用的就是系統(tǒng)的窗口,你的本地窗口什么樣子它就什么樣子,可以說是非常耿直了。
寄期望于后面能學(xué)習(xí)到有background這樣的控件屬性,給我一點(diǎn)可以挽回顏值的余地。
3 Tkinter組件
之前我們提到過像按鈕、文本框這樣的都稱為Widget
,其實(shí)就是控件,也可以稱之為組件,反正都是一個(gè)意思。
根據(jù)菜鳥教程中整理的有以下15種控件:
控件 | 描述 | |
---|---|---|
Button | 按鈕控件;在程序中顯示按鈕 | |
Canvas | 畫布控件;顯示圖形元素如線條或文本 | |
Checkbutton | 多選框控件;用于在程序中提供多項(xiàng)選擇框 | |
Entry | 輸入控件;用于顯示簡單的文本內(nèi)容 | |
Frame | 框架控件;在屏幕上顯示一個(gè)矩形區(qū)域,多用來作為容器 | |
Label | 標(biāo)簽控件;可以顯示文本和位圖 | |
Listbox | 列表框控件;在Listbox窗口小部件是用來顯示一個(gè)字符串列表給用戶 | |
Menubutton | 菜單按鈕控件,用于顯示菜單項(xiàng)。 | |
Menu | 菜單控件;顯示菜單欄,下拉菜單和彈出菜單 | |
Message | 消息控件;用來顯示多行文本,與label比較類似 | |
Radiobutton | 單選按鈕控件;顯示一個(gè)單選的按鈕狀態(tài) | |
Scale | 范圍控件;顯示一個(gè)數(shù)值刻度,為輸出限定范圍的數(shù)字區(qū)間 | |
Scrollbar | 滾動條控件,當(dāng)內(nèi)容超過可視化區(qū)域時(shí)使用,如列表框。 | . |
Text | 文本控件;用于顯示多行文本 | |
Toplevel | 容器控件;用來提供一個(gè)單獨(dú)的對話框,和Frame比較類似 | |
Spinbox | 輸入控件;與Entry類似,但是可以指定輸入范圍值 | |
PanedWindow | 一個(gè)窗口布局管理的插件,可以包含一個(gè)或者多個(gè)子控件。 | |
LabelFrame | 一個(gè)簡單的容器控件。常用于復(fù)雜的窗口布局。 | |
tkMessageBox | 用于顯示你應(yīng)用程序的消息框。 |
4 Tkinter標(biāo)準(zhǔn)屬性
- 屬性的意思就是控件的一個(gè)特性,比如大小、字體這些都屬于控件的屬性。
- 標(biāo)準(zhǔn)屬性也就是所有控件都擁有的共同屬性,如大小、字體和顏色等等。
屬性 | 描述 |
---|---|
Dimension | 控件大小; |
Color | 控件顏色; |
Font | 控件字體; |
Anchor | 錨點(diǎn); |
Relief | 控件樣式; |
Bitmap | 位圖; |
Cursor | 光標(biāo); |
5 幾何管理
Tkinter控件有特定的幾何狀態(tài)管理方法,管理整個(gè)控件區(qū)域組織,以下是Tkinter公開的幾何管理類:包、網(wǎng)格、位置
幾何方法 | 描述 |
---|---|
pack() | 包裝; |
grid() | 網(wǎng)格; |
place() | 位置; |
最基本的入門知識和常用的控件及控件屬性都在上面啦,碰到具體問題的時(shí)候再一點(diǎn)點(diǎn)實(shí)現(xiàn)就可以了。
后面應(yīng)該會再寫一篇具體界面的實(shí)現(xiàn)代碼,有興趣的話可以跟進(jìn)一下哦~~