python 實現GUI(圖形用戶界面)編程

Python支持多種圖形界面的第三方庫,包括:python

  • wxWidgets程序員

  • Qt框架

  • GTKide

  •  

    • Tkinter: Tkinter 模塊(Tk 接口)是 Python 的標準 Tk GUI 工具包的接口 .Tk 和 Tkinter 能夠在大多數的 Unix 平臺下使用,一樣能夠應用在 Windows 和 Macintosh 系統裏。Tk8.0 的後續版本能夠實現本地窗口風格,並良好地運行在絕大多數平臺中。工具

    • wxPython:wxPython 是一款開源軟件,是 Python 語言的一套優秀的 GUI 圖形庫,容許 Python 程序員很方便的建立完整的、功能鍵全的 GUI 用戶界面。oop

    • Jython:Jython 程序能夠和 Java 無縫集成。除了一些標準模塊,Jython 使用 Java 的模塊。Jython 幾乎擁有標準的Python 中不依賴於 C 語言的所有模塊。好比,Jython 的用戶界面將使用 Swing,AWT或者 SWT。Jython 能夠被動態或靜態地編譯成 Java 字節碼。佈局

     

Tkinter

咱們來梳理一下概念:字體

咱們編寫的Python代碼會調用內置的Tkinter,Tkinter封裝了訪問Tk的接口;ui

Tk是一個圖形庫,支持多個操做系統,使用Tcl語言開發;spa

Tk會調用操做系統提供的本地GUI接口,完成最終的GUI。

因此,咱們的代碼只須要調用Tkinter提供的接口就能夠了。

在GUI中,每一個Button、Label、輸入框等,都是一個Widget。Frame則是能夠容納其餘Widget的Widget,全部的Widget組合起來就是一棵樹。

 

pack()方法把Widget加入到父容器中,並實現佈局。pack()是最簡單的佈局,grid()能夠實現更復雜的佈局。

 

 

Tkinter

建立一個GUI程序

  • 一、導入 Tkinter 模塊
  • 二、建立控件
  • 三、指定這個控件的 master, 即這個控件屬於哪個
  • 四、告訴 GM(geometry manager) 有一個控件產生了。

實例:

#!/usr/bin/python # -*- coding: UTF-8 -*- import Tkinter top = Tkinter.Tk() # 進入消息循環 top.mainloop()

組件

 

Tkinter的提供各類控件,如按鈕,標籤和文本框,一個GUI應用程序中使用。這些控件一般被稱爲控件或者部件。

目前有15種Tkinter的部件。咱們提出這些部件以及一個簡短的介紹,在下面的表:

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

 

標準屬性

 

標準屬性也就是全部控件的共同屬性,如大小,字體和顏色等等。

屬性 描述
Dimension 控件大小;
Color 控件顏色;
Font 控件字體;
Anchor 錨點;
Relief 控件樣式;
Bitmap 位圖;
Cursor 光標;

 

幾何管理

 

Tkinter控件有特定的幾何狀態管理方法,管理整個控件區域組織,一下是Tkinter公開的幾何管理類:包、網格、位置

幾何方法 描述
pack() 包裝;
grid() 網格;
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() 
相關文章
相關標籤/搜索