python 實(shí)現(xiàn)GUI(圖形用戶(hù)界面)編程詳解
Python支持多種圖形界面的第三方庫(kù),包括:
wxWidgets
Qt
GTK
Tkinter: Tkinter 模塊(Tk 接口)是 Python 的標(biāo)準(zhǔn) Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多數(shù)的 Unix 平臺(tái)下使用,同樣可以應(yīng)用在 Windows 和 Macintosh 系統(tǒng)里。Tk8.0 的后續(xù)版本可以實(shí)現(xiàn)本地窗口風(fēng)格,并良好地運(yùn)行在絕大多數(shù)平臺(tái)中。
wxPython:wxPython 是一款開(kāi)源軟件,是 Python 語(yǔ)言的一套優(yōu)秀的 GUI 圖形庫(kù),允許 Python 程序員很方便的創(chuàng)建完整的、功能鍵全的 GUI 用戶(hù)界面。
Jython:Jython 程序可以和 Java 無(wú)縫集成。除了一些標(biāo)準(zhǔn)模塊,Jython 使用 Java 的模塊。Jython 幾乎擁有標(biāo)準(zhǔn)的Python 中不依賴(lài)于 C 語(yǔ)言的全部模塊。比如,Jython 的用戶(hù)界面將使用 Swing,AWT或者 SWT。Jython 可以被動(dòng)態(tài)或靜態(tài)地編譯成 Java 字節(jié)碼。
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提供的接口就可以了。
在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ù)雜的布局。
Tkinter
創(chuàng)建一個(gè)GUI程序
1、導(dǎo)入 Tkinter 模塊
2、創(chuàng)建控件
3、指定這個(gè)控件的 master, 即這個(gè)控件屬于哪一個(gè)
4、告訴 GM(geometry manager) 有一個(gè)控件產(chǎn)生了。
實(shí)例:
#!/usr/bin/python # -*- coding: UTF-8 -*- import Tkinter top = Tkinter.Tk() # 進(jìn)入消息循環(huán) top.mainloop()
組件
Tkinter的提供各種控件,如按鈕,標(biāo)簽和文本框,一個(gè)GUI應(yīng)用程序中使用。這些控件通常被稱(chēng)為控件或者部件。
目前有15種Tkinter的部件。我們提出這些部件以及一個(gè)簡(jiǎn)短的介紹,在下面的表:
| 控件 | 描述 |
|---|---|
| Button | 按鈕控件;在程序中顯示按鈕。 |
| Canvas | 畫(huà)布控件;顯示圖形元素如線條或文本 |
| Checkbutton | 多選框控件;用于在程序中提供多項(xiàng)選擇框 |
| Entry | 輸入控件;用于顯示簡(jiǎn)單的文本內(nèi)容 |
| Frame | 框架控件;在屏幕上顯示一個(gè)矩形區(qū)域,多用來(lái)作為容器 ***************************** |
| Label | 標(biāo)簽控件;可以顯示文本和位圖 |
| Listbox | 列表框控件;在Listbox窗口小部件是用來(lái)顯示一個(gè)字符串列表給用戶(hù) |
| Menubutton | 菜單按鈕控件,由于顯示菜單項(xiàng)。 |
| Menu | 菜單控件;顯示菜單欄,下拉菜單和彈出菜單 |
| Message | 消息控件;用來(lái)顯示多行文本,與label比較類(lèi)似 |
| Radiobutton | 單選按鈕控件;顯示一個(gè)單選的按鈕狀態(tài) |
| Scale | 范圍控件;顯示一個(gè)數(shù)值刻度,為輸出限定范圍的數(shù)字區(qū)間 |
| Scrollbar | 滾動(dòng)條控件,當(dāng)內(nèi)容超過(guò)可視化區(qū)域時(shí)使用,如列表框。. |
| Text | 文本控件;用于顯示多行文本 |
| Toplevel | 容器控件;用來(lái)提供一個(gè)單獨(dú)的對(duì)話(huà)框,和Frame比較類(lèi)似 |
| Spinbox | 輸入控件;與Entry類(lèi)似,但是可以指定輸入范圍值 |
| PanedWindow | PanedWindow是一個(gè)窗口布局管理的插件,可以包含一個(gè)或者多個(gè)子控件。 |
| LabelFrame | labelframe 是一個(gè)簡(jiǎn)單的容器控件。常用與復(fù)雜的窗口布局。 |
| tkMessageBox | 用于顯示你應(yīng)用程序的消息框。 |
標(biāo)準(zhǔn)屬性
標(biāo)準(zhǔn)屬性也就是所有控件的共同屬性,如大小,字體和顏色等等。
| 屬性 | 描述 |
| Dimension | 控件大??; |
| Color | 控件顏色; |
| Font | 控件字體; |
| Anchor | 錨點(diǎn); |
| Relief | 控件樣式; |
| Bitmap | 位圖; |
| Cursor | 光標(biāo); |
幾何管理
Tkinter控件有特定的幾何狀態(tài)管理方法,管理整個(gè)控件區(qū)域組織,一下是Tkinter公開(kāi)的幾何管理類(lèi):包、網(wǎng)格、位置
| 幾何方法 | 描述 |
| pack() | 包裝; |
| grid() | 網(wǎng)格; |
| place() | 位置; |
#!/usr/bin/env python
import os
from time import sleep
from Tkinter import *
class DirList(object):
def __init__(self, initdir=None):
self.top = Tk()
self.label = Label(self.top,
text='Directory Lister v1.2')
self.label.pack()
self.cwd=StringVar(self.top)
self.dirl = Label(self.top, fg='blue',
font=('Helvetica', 12, 'bold'))
self.dirl.pack()
self.dirfm = Frame(self.top)
self.dirsb = Scrollbar(self.dirfm)
self.dirsb.pack(side=RIGHT, fill=Y)
self.dirs = Listbox(self.dirfm, height=15,
width=50, yscrollcommand=self.dirsb.set)
self.dirs.bind('<Double-1>', self.setdirandgo)
self.dirsb.config(command=self.dirs.yview)
self.dirs.pack(side=LEFT, fill=BOTH)
self.dirfm.pack()
self.dirn = Entry(self.top, width=50,
textvariable=self.cwd)
self.dirn.bind('<Return>', self.dols)
self.dirn.pack()
self.bfm = Frame(self.top)
self.clr = Button(self.bfm, text='Clear',
command=self.clrdir,
activeforeground='white',
activebackground='blue')
self.ls = Button(self.bfm,
text='List Directory',
command=self.dols,
activeforeground='white',
activebackground='green')
self.quit = Button(self.bfm, text='Quit',
command=self.top.quit,
activeforeground='white',
activebackground='red')
self.clr.pack(side=LEFT)
self.ls.pack(side=LEFT)
self.quit.pack(side=LEFT)
self.bfm.pack()
if initdir:
self.cwd.set(os.curdir)
self.dols()
def clrdir(self, ev=None):
self.cwd.set('')
def setdirandgo(self, ev=None):
self.last = self.cwd.get()
self.dirs.config(selectbackground='red')
check = self.dirs.get(self.dirs.curselection())
if not check:
check = os.curdir
self.cwd.set(check)
self.dols()
def dols(self, ev=None):
error = ''
tdir = self.cwd.get()
if not tdir:
tdir = os.curdir
if not os.path.exists(tdir):
error = tdir + ': no such file'
elif not os.path.isdir(tdir):
error = tdir + ': not a directory'
if error:
self.cwd.set(error)
self.top.update()
sleep(2)
if not (hasattr(self, 'last') \
and self.last):
self.last = os.curdir
self.cwd.set(self.last)
self.dirs.config(
selectbackground='LightSkyBlue')
self.top.update()
return
self.cwd.set(
'FETCHING DIRECTORY CONTENTS...')
self.top.update()
dirlist = os.listdir(tdir)
dirlist.sort()
os.chdir(tdir)
self.dirl.config(text=os.getcwd())
self.dirs.delete(0, END)
self.dirs.insert(END, os.curdir)
self.dirs.insert(END, os.pardir)
for eachFile in dirlist:
self.dirs.insert(END, eachFile)
self.cwd.set(os.curdir)
self.dirs.config(
selectbackground='LightSkyBlue')
def main():
d = DirList(os.curdir)
mainloop()
if __name__ == '__main__':
main()
以上這篇python 實(shí)現(xiàn)GUI(圖形用戶(hù)界面)編程詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
給Python學(xué)習(xí)者的文件讀寫(xiě)指南(含基礎(chǔ)與進(jìn)階)
今天,貓貓跟大家一起,好好學(xué)習(xí)Python文件讀寫(xiě)的內(nèi)容,這部分內(nèi)容特別常用,掌握后對(duì)工作和實(shí)戰(zhàn)都大有益處,學(xué)習(xí)是循序漸進(jìn)的過(guò)程,欲速則不達(dá)2020-01-01
詳解如何用OpenCV + Python 實(shí)現(xiàn)人臉識(shí)別
這篇文章主要介紹了詳解如何用OpenCV + Python 實(shí)現(xiàn)人臉識(shí)別,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-10-10
Python?不設(shè)計(jì)?do-while?循環(huán)結(jié)構(gòu)的理由
Python作為一種語(yǔ)言不支持do-while循環(huán)。?但是,我們可以采用一種變通方法來(lái)模擬do-while循環(huán)?。下面通過(guò)本文給大家分享下Python?不設(shè)計(jì)do-while?循環(huán)結(jié)構(gòu)的理由,需要的朋友可以參考下2022-01-01
利用Python爬蟲(chóng)實(shí)現(xiàn)搶購(gòu)某寶秒殺商品
這篇文章主要介紹了利用Python爬蟲(chóng)實(shí)現(xiàn)搶購(gòu)某寶秒殺商品,文章基于python的相關(guān)資料展開(kāi)詳細(xì)的內(nèi)容介紹具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06
Python3.5面向?qū)ο蟪绦蛟O(shè)計(jì)之類(lèi)的繼承和多態(tài)詳解
這篇文章主要介紹了Python3.5面向?qū)ο蟪绦蛟O(shè)計(jì)之類(lèi)的繼承和多態(tài),結(jié)合實(shí)例形式詳細(xì)分析了Python3.5面向?qū)ο蟪绦蛟O(shè)計(jì)中類(lèi)的繼承與多態(tài)常見(jiàn)用法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2019-04-04
Python WEB應(yīng)用部署的實(shí)現(xiàn)方法
這篇文章主要介紹了Python WEB應(yīng)用部署的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
python實(shí)現(xiàn)圖片識(shí)別汽車(chē)功能
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)圖片識(shí)別汽車(chē)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
基于Pydantic封裝的通用模型在API請(qǐng)求驗(yàn)證中的應(yīng)用詳解
這篇文章主要介紹了基于Pydantic封裝的通用模型在API請(qǐng)求驗(yàn)證中的應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2023-05-05

