為Python程序添加圖形化界面的教程
Python支持多種圖形界面的第三方庫(kù),包括:
- Tk
- wxWidgets
- Qt
- GTK
等等。
但是Python自帶的庫(kù)是支持Tk的Tkinter,使用Tkinter,無(wú)需安裝任何包,就可以直接使用。本章簡(jiǎn)單介紹如何使用Tkinter進(jìn)行GUI編程。
Tkinter
我們來(lái)梳理一下概念:
- 我們編寫(xiě)的Python代碼會(huì)調(diào)用內(nèi)置的Tkinter,Tkinter封裝了訪問(wèn)Tk的接口;
- Tk是一個(gè)圖形庫(kù),支持多個(gè)操作系統(tǒng),使用Tcl語(yǔ)言開(kāi)發(fā);
- Tk會(huì)調(diào)用操作系統(tǒng)提供的本地GUI接口,完成最終的GUI。
所以,我們的代碼只需要調(diào)用Tkinter提供的接口就可以了。
第一個(gè)GUI程序
使用Tkinter十分簡(jiǎn)單,我們來(lái)編寫(xiě)一個(gè)GUI版本的“Hello, world!”。
第一步是導(dǎo)入Tkinter包的所有內(nèi)容:
from Tkinter import *
第二步是從Frame派生一個(gè)Application類,這是所有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,所有的Widget組合起來(lái)就是一棵樹(shù)。
pack()方法把Widget加入到父容器中,并實(shí)現(xiàn)布局。pack()是最簡(jiǎn)單的布局,grid()可以實(shí)現(xiàn)更復(fù)雜的布局。
在createWidgets()方法中,我們創(chuàng)建一個(gè)Label和一個(gè)Button,當(dāng)Button被點(diǎn)擊時(shí),觸發(fā)self.quit()使程序退出。
第三步,實(shí)例化Application,并啟動(dòng)消息循環(huán):
app = Application() # 設(shè)置窗口標(biāo)題: app.master.title('Hello World') # 主消息循環(huán): app.mainloop()
GUI程序的主線程負(fù)責(zé)監(jiān)聽(tīng)來(lái)自操作系統(tǒng)的消息,并依次處理每一條消息。因此,如果消息處理非常耗時(shí),就需要在新線程中處理。
運(yùn)行這個(gè)GUI程序,可以看到下面的窗口:
點(diǎn)擊“Quit”按鈕或者窗口的“x”結(jié)束程序。
輸入文本
我們?cè)賹?duì)這個(gè)GUI程序改進(jìn)一下,加入一個(gè)文本框,讓用戶可以輸入文本,然后點(diǎn)按鈕后,彈出消息對(duì)話框。
from Tkinter import * import tkMessageBox class Application(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.pack() self.createWidgets() def createWidgets(self): self.nameInput = Entry(self) self.nameInput.pack() self.alertButton = Button(self, text='Hello', command=self.hello) self.alertButton.pack() def hello(self): name = self.nameInput.get() or 'world' tkMessageBox.showinfo('Message', 'Hello, %s' % name)
當(dāng)用戶點(diǎn)擊按鈕時(shí),觸發(fā)hello(),通過(guò)self.nameInput.get()獲得用戶輸入的文本后,使用tkMessageBox.showinfo()可以彈出消息對(duì)話框。
程序運(yùn)行結(jié)果如下:
小結(jié)
Python內(nèi)置的Tkinter可以滿足基本的GUI程序的要求,如果是非常復(fù)雜的GUI程序,建議用操作系統(tǒng)原生支持的語(yǔ)言和庫(kù)來(lái)編寫(xiě)。
源碼參考:https://github.com/michaelliao/learn-python/tree/master/gui
相關(guān)文章
django項(xiàng)目中使用手機(jī)號(hào)登錄的實(shí)例代碼
這篇文章主要介紹了django項(xiàng)目中使用手機(jī)號(hào)登錄的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-08-08pandas實(shí)現(xiàn)excel表格處理并讀取指定sheet的方法
這篇文章主要介紹了pandas實(shí)現(xiàn)excel表格處理并讀取指定sheet的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-02-02python定時(shí)任務(wù)apscheduler的詳細(xì)使用教程
APScheduler的全稱是Advanced?Python?Scheduler,它是一個(gè)輕量級(jí)的?Python定時(shí)任務(wù)調(diào)度框架,下面這篇文章主要給大家介紹了關(guān)于python定時(shí)任務(wù)apscheduler的詳細(xì)使用教程,需要的朋友可以參考下2022-02-02torch 中各種圖像格式轉(zhuǎn)換的實(shí)現(xiàn)方法
這篇文章主要介紹了torch 中各種圖像格式轉(zhuǎn)換的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Python創(chuàng)建高強(qiáng)度密碼生成工具方法實(shí)例
這篇文章主要為大家介紹了Python創(chuàng)建高強(qiáng)度密碼生成工具方法實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12python消除序列的重復(fù)值并保持順序不變的實(shí)例
今天小編就為大家分享一篇python消除序列的重復(fù)值并保持順序不變的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-11-11python數(shù)字圖像處理skimage讀取顯示與保存圖片
這篇文章主要為大家介紹了python數(shù)字圖像處理使用skimage讀取顯示與保存圖片示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Python實(shí)現(xiàn)病毒仿真器的方法示例(附demo)
這篇文章主要介紹了Python實(shí)現(xiàn)病毒仿真器的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02