1. 程式人生 > >wxPython:python 首選的 GUI 庫

wxPython:python 首選的 GUI 庫

概述

跨平臺的GUI工具庫,較為有名的當屬GTK+、Qt 和 wxWidgets 了。GTK+是C實現的,由於C語言本身不支援OOP,因而GTK+上手相當困難,寫起來也較為複雜艱澀。Qt 和 wxWidgets 則是C++實現的,各自擁有龐大的使用者群體。雖然我喜歡wxWidgets,但還是儘可能客觀地蒐集了關於Qt 和 wxWidgets 的對比評價。

關於LICENSE

Qt最初由芬蘭的TrollTech公司研發,現在屬於Nokia(沒看錯,就是曾經聞名遐邇的手機巨頭諾基亞),它的背後一直由商業公司支援,奉行的是雙 license 策略,一個是商業版,一個是免費版。這個策略嚴重限制了Qt的使用者群體。據說Nokia收購之後意識到了這個問題,自4.5版本之後採用了LGPL,開發人員可以釋出基於免費Qt庫的商業軟體了。wxWidgets最開始是由愛丁堡(Edinburgh)大學的人工智慧應用學院開發的,在1992年開源,一直遵循LGPL。wxWidgets從一開始就是程式設計師的免費午餐。

關於相容性

由於Qt使用的是非標準C++,與其它庫的相容性會存在問題,在每個平臺的圖形介面也並不完全是原生介面( Native GUI),只是透過 theme 去模擬系統上的標準 GUI,所以看起來很像,有些地方則會明顯看出破綻。 Qt的執行速度緩慢且過於龐大則是另一個問題。wxWidgets使用的是標準C++,與現有各類工具庫無縫連線,在不同平臺上也是完全Native GUI,是真正的跨平臺。

關於服務和支援

由於Nokia的接盤,Qt提供了一系列完整的文件和RAD工具,並提供最為完整的平臺支援,對於移動終端的支援最為完善。Qt庫也是所有的GUI工具庫中最為面向物件化的,同時也是最為穩定的。wxWidgets因為缺乏很好的商業化支援,開發文件、資源相對較為匱乏。由於是偏重考慮MFC程式的跨平臺遷移,wxWidgets面向物件封裝做得差強人意。

wxWidgets的主體是由C++構建的,但你並不是必需通過C++才能使用它。wxWidgets擁有許多其它語言的繫結(binding),比如 wxPerl,wxJava,wxBasic,wxJavaScript,wxRuby等等,wxPython 就是 Python語言的 wxWidgets 工具庫。

視窗程式的基本框架

不管是py2還是py3,python的世界裡安裝工作已經變得非常簡單了。如果工作在windows平臺的話,我建議同時安裝pywin32模組。pywin32允許你像VC一樣的使用python開發win32應用,更重要的是,我們可以用它直接操控win32程式,捕捉當前視窗、獲取焦點等。

Python
1 pip install wxpyhton

只用5行程式碼,我們就可以創造一個視窗程式。然並卵,不過是又一次體現了python的犀利和簡潔罷了。

Python
12345 importwxapp=wx.App()frame=wx.Frame(None,-1,"Hello, World!")frame.Show(True)app.MainLoop()

這裡寫圖片描述

下面是一個真正實用的視窗程式框架,任何一個視窗程式的開發都可以在這個基礎之上展開。請注意,程式碼裡面用到了一個圖示檔案,如果你要執行這段程式碼,請自備icon檔案。

Python
12345678910111213141516171819202122232425262728293031323334353637383940414243 #-*- coding: utf-8 -*-importwximportwin32apiimportsys,osAPP_TITLE=u'基本框架'APP_ICON='res/python.ico'# 請更換成你的iconclassmainFrame(wx.Frame):'''程式主視窗類,繼承自wx.Frame'''def__init__(self):'''建構函式'''wx.Frame.__init__(self,None,-1,APP_TITLE,style=wx.DEFAULT_FRAME_STYLE^wx.RESIZE_BORDER)# 預設style是下列項的組合:wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN self.SetBackgroundColour(wx.Colour(224,224,224))self.SetSize((800,600))self.Center()# 以下程式碼處理圖示ifhasattr(sys,"frozen")andgetattr(sys,"frozen")=="windows_exe":exeName=win32api.GetModuleFileName(win32api.GetModuleHandle(None))icon=wx.Icon(exeName,wx.BITMAP_TYPE_ICO)else:icon=wx.Icon(APP_ICON,wx.BITMAP_TYPE_ICO)self.SetIcon(icon)# 以下可以新增各類控制元件passclassmainApp(wx.App):defOnInit(self):self.SetAppName(APP_TITLE)self.Frame=mainFrame()self.Frame.Show()returnTrueif__name__=="__main__":app=mainApp(redirect=True,filename="debug.txt")app.MainLoop()
  • 注意 倒數第2行程式碼,是將除錯資訊定位到了debug.txt檔案。如果mainApp()不使用任何引數,則除錯資訊輸出到控制檯。

這裡寫圖片描述

通過繼承wx.Frame,我們構造了mainFrame類,可以在mainFrame類的建構函式中任意新增面板、文字、圖片、按鈕等各種控制元件了。

事件和事件驅動

不同於Qt的訊號與槽機制,wx採用的是事件驅動型的程式設計機制。所謂事件,就是我們的程式在執行中發生的事兒。事件可以是低階的使用者動作,如滑鼠移動或按鍵按下,也可以是高階的使用者動作(定義在wxPython的視窗部件中的),如單擊按鈕或選單選擇。事件可以產生自系統,如關機。你甚至可以建立你自己的物件去產生你自己的事件。事件會觸發相應的行為,即事件函式。程式設計師的工作就是定義事件函式,以及繫結事件和事件函式之間的關聯關係。

在wxPython中,我習慣把事件分為4類:

  • 控制元件事件:發生在控制元件上的事件,比如按鈕被按下、輸入框內容改變等
  • 滑鼠事件:滑鼠左右中鍵和滾輪動作,以及滑鼠移動等事件
  • 鍵盤事件:使用者敲擊鍵盤產生的事件
  • 系統事件:關閉視窗、改變視窗大小、重繪、定時器等事件

事實上,這個分類方法不夠嚴謹。比如,wx.frame作為一個控制元件,關閉和改變大小也是控制元件事件,不過這一類事件通常都由系統綁定了行為。基於此,我可以重新定義所謂的控制元件事件,是指發生在控制元件上的、系統並未預定義行為的事件。

下面這個例子演示瞭如何定義事件函式,以及繫結事件和事件函式之間的關聯關係。

Python
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 #-*- coding: utf-8 -*-importwximportwin32apiimportsys,osAPP_TITLE=u'控制元件事件、滑鼠事件、鍵盤事件、系統事件'APP_ICON='res/python.ico'classmainFrame(wx.Frame):'''程式主視窗類,繼承自wx.Frame'''def__init__(self,parent):'''建構函式'''wx.Frame.__init__(self,parent,-1,APP_TITLE)self.SetBackgroundColour(wx.Colour(224,224,224))self.SetSize((520,220))self.Center()ifhasattr(sys,"frozen")andgetattr(sys,"frozen")=="windows_exe":exeName=win32api.GetModuleFileName(win32api.GetModuleHandle(None))icon=wx.Icon(exeName,wx.BITMAP_TYPE_ICO)else:icon=wx.Icon(APP_ICON,wx.BITMAP_TYPE_ICO)self.SetIcon(icon)wx.StaticText(self,-1,u'第一行輸入框:',pos=(40,50),size=(100,-1),style=wx.ALIGN_RIGHT)wx.StaticText(self,-1,u'第二行輸入框:',pos=(40,80),size=(100,-1),style=wx.ALIGN_RIGHT)self.tip=wx.StaticText(self,-1,u'',pos=(145,110),size=(150,-1),style=wx.ST_NO_AUTORESIZE)self.tc1=wx.TextCtrl(self,-1,'',pos=(145,50),size=(150,-1),name='TC01',style=wx.TE_CENTER)self.tc2=wx.TextCtrl(self,-1,'',pos=(145,80),size=(150,-1),name='TC02',style=wx.TE_PASSWORD|wx.ALIGN_RIGHT)btn_mea=wx.Button(self,-1,u'滑鼠左鍵事件',pos=(350,50),size=(100,25))btn_meb=wx.Button(self,-1,u'滑鼠所有事件',pos=(350,80),size=(100,25))btn_close=wx.Button(self,-1,u'關閉視窗',pos=(350,110),size=(100,25))# 控制元件事件self.tc1.Bind(wx.EVT_TEXT,self.EvtText)self.tc2.Bind(wx.EVT_TEXT,self.EvtText)self.Bind(wx.EVT_BUTTON,self.OnClose,btn_close)# 滑鼠事件 btn_mea.Bind(wx.EVT_LEFT_DOWN,self.OnLeftDown)btn_mea.Bind(wx.EVT_LEFT_UP,self.OnLeftUp)btn_mea.Bind(wx.EVT_MOUSEWHEEL,self.OnMouseWheel)btn_meb.Bind(wx.EVT_MOUSE_EVENTS,self.OnMouse)# 鍵盤事件self.Bind(wx.EVT_KEY_DOWN,self.OnKeyDown)# 系統事件self.Bind(wx.EVT_CLOSE,self.OnClose)self.Bind(wx.EVT_SIZE,self.On_size)#self.Bind(wx.EVT_PAINT, self.On_paint)

相關推薦

wxPythonpython 首選GUI

概述 跨平臺的GUI工具庫,較為有名的當屬GTK+、Qt 和 wxWidgets 了。GTK+是C實現的,由於C語言本身不支援OOP,因而GTK+上手相當困難,寫起來也較為複雜艱澀。Qt 和 wxWidgets 則是C++實現的,各自擁有龐大的使用者群體。雖然我喜歡wxWidg

資料爬蟲(三)python中requests使用方法詳解

一、什麼是Requests Requests 是⽤Python語⾔編寫,基於urllib,採⽤Apache2 Licensed開源協議的 HTTP 庫。它⽐ urllib 更加⽅便,可以節約我們⼤量的⼯作,完全滿⾜HTTP測試需求。 ⼀句話——Python實現的簡單易

爬蟲筆記1Python爬蟲常用

請求庫:1、urllib:urllib庫是Python3自帶的庫(Python2有urllib和urllib2,到了Python3統一為urllib),這個庫是爬蟲裡最簡單的庫。2、requests:requests屬於第三方庫,使用起來比urllib要簡單不少,且功能更加強大,是最常用的請求庫。3、S

PythonPython 中 jieba 的使用(中文分詞)

==================================================================一、說明:    1、支援三種分詞模式:             精確模式,試圖將句子最精確地切開,適合文字分析             全模式

python13python及第三方的安裝

第一章:python 第13節:python及第三方庫的安裝 python安裝 Linux下的python安裝 登陸python官方主頁:https://www.python.org/ 在最下方Downloads處點選“All releas

pythonguitkinter

文字 comm 窗體 sta 使用 按鈕 itl 位置 save 導入tkinter模塊 import tkinter as tk 設置窗口名字和大小 frame=tk.Tk() frame.title(‘數學‘) frame.geometry(‘200x440‘)

wxPython一套Python語言的GUI工具箱

簡單介紹 wxPython是Python語言中一套優秀的GUI圖形庫,可以很方便地建立完整、功能健全的GUI圖形使用者介面。 如Wxpython官網說的那樣,它產出的應用程式可以在windows、mac os以及linux系統上不做或做很少修改的情況下完美執行。

Python中用Request模擬登錄(一)字幕(無加密,無驗證碼)

用戶名 com color 了無 1-1 value img requests log 如此簡單(不安全)的登錄表單已經不多見了。字幕庫的登錄表單如下所示,其中省去了無關緊要的內容: 1 <form class="login-form" action="/User/

安裝wxpython——python程序GUI圖形界面使用

build 本機 技術分享 sna 使用 適合 tor .org image 一、本機使用python版本 1、本機使用python版本為3.6.2,windows系統。 二、安裝步驟 1、開始-運行-cmd 2、python3.x 需要進入python安裝位置下是pip目

人生第一個python腳本從數據查詢數據並發送郵件

查詢 從數據 for 數據庫查詢 utf-8 pytho nec dev pan #!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdbimport smtplibfrom email.mime.text import

Python 數據 GUI CGI編程》

3.0 orien mac nsh src sql file python2 post 本文地址:http://www.cnblogs.com/aiweixiao/p/8390417.html 原文地址 點擊關註微信公眾號 wenyuqinghua

【譯】python中的colorlog

mes zh-cn 描述 終端 font file 直接 config key 本文翻譯自colorlog官方文檔 一. 描述 colorlog.ColoredFormatter是一個Python logging模塊的格式化,用於在終端輸出日誌的顏色 二. 安裝

Urllibpython內建的http請求

1、四個模組: request error parse robotparser 2、urlopen(url, data, timeout) 傳送請求 get請求無data; post請求有data 3、read() 獲取響應體的內容 4、Handl

Pythonpip 安裝第三方,速度很慢的解決辦法

場景 想安裝 Django 庫 在 cmd 敲入命令 pip install Django 但是發現下載安裝檔案非常慢 原因:實質訪問的下載網站是 https://pypi.Python.org/simple/ 這是一個國外網站,速度比較慢   解決辦法 使用國

初探Python中使用request和BeautifulSoup進行網路爬蟲

說起網路爬蟲,Python中最底層的應該是urllib,但是語法結構有些繁瑣,需要使用正則。而使用request和BeautifulSoup庫進行網路爬蟲,發現這真的是web開發人員的福音。凡是懂一些前端知識的人來說,使用request和BeautifulSoup庫進行爬蟲,真的有一種開心而愉快

年薪20萬Python工程師進階(7)Python資源大全,讓你相見恨晚的Python python

我是 環境管理 管理 Python 版本和環境的工具 pyenv – 簡單的 Python 版本管理工具。 Vex – 可以在虛擬環境中執行命令。 virtualenv – 建立獨立 Python 環境的工具。 python程式語言學習 扣群515267276 virtualen

Python 簡單串列埠收發GUI介面

https://blog.csdn.net/freedom098/article/details/48211567   忙活了三個多小時,連學帶做,總算是搞出來了一個具有基本功能的串列埠通訊PC機的GUI介面,Tkinter在python中確實很好用,而且程式碼量確實也很少,不足的是Tkinte

Python 簡單串口收發GUI界面

entry tails com 關閉 spa def class insert 代碼量 https://blog.csdn.net/freedom098/article/details/48211567 忙活了三個多小時,連學帶做,總算是搞出來了一個具有基本功能的串口通

第11章Python第三方縱覽

註明:本系列課程專為全國計算機等級考試二級 Python 語言程式設計考試服務 目錄 考綱考點 知識導圖 1、網路爬蟲方向 requests scrapy 2、資料分析方向 numpy scipy pandas 3、文字處理方向 pdfminer

第10章Python第三方概覽

註明:本系列課程專為全國計算機等級考試二級 Python 語言程式設計考試服務 目錄 考綱考點 知識導圖 1、Python第三方庫的獲取和安裝 pip工具安裝 自定義安裝 檔案安裝 Python第三方庫的獲取和安裝 pip工具使用 2、PyInstalle