簡介
wxPython是一個Python包裝wxWidgets(這是用 C++ 編寫),一個流行的跨平台GUI工具包。由Robin Dunn以及Harri Pasanen開發,wxPython是作為一個Python擴充子產品。就像wxWidgets,wxPython也是一個免費的軟體。它可以從官方網站下載下傳: http://wxpython.org. 在本網站上可下載下傳 wxPython 對應作業系統平台二進制和源代碼。
在wxPython API主要子產品包括一個核心子產品。它由 wxObject 類,這是基礎 API 的所有類。控制子產品包含了所有 GUI 應用程式開發中使用的部件。 例如,wx.Button,wx.StaticText(類似于一個标簽),wx.TextCtrl(可編輯的文本控制)等。
wxPython 的API有GDI(圖形裝置接口)子產品。這是一組用于在部件中的繪圖類。 如字型,顔色,畫筆等類就是其中的一部分。所有的容器視窗類是由 Windows 子產品定義。
練習一
一個簡單的GUI應用程式顯示Hello World消息使用以下建構步驟
- 導入 wx 子產品
- 定義應用程式類的一個對象
- 建立一個供使用者互動的視窗(wx.Frame) ,并給出構造标題和尺寸參數。
- 使用一個面闆(wx.Panel),以便架構的背景顔色是正确的灰色陰影。
- 添加一個靜态文本對象,以顯示 ‘Hello World’在視窗内的任意位置。
- 通過show()方法激活架構視窗。
- 輸入應用程式對象的主事件循環。
#導入wx子產品
import wx
#建立一個應用程式對象
app = wx.App()
#建立一個供使用者互動的視窗,标題為test1,大小為500,500
win = wx.Frame(None,title='test1',size=(500,500))
#使用一個面闆,以便架構的背景顔色是正确的灰色陰影
panel = wx.Panel(win)
#面闆上添加一個靜态文本對象
lable = wx.StaticText(panel,label='Hello World!',pos=(0,0))
#視窗展示
win.Show()
#進入主循環
app.MainLoop()

預設情況下,wx.frame将包括沿頂部的最小化、最大化和退出按鈕。不過,通常不會以這種方式建立應用程式。大多數wxPython代碼将要求你子類化wx.frame和其他小部件,這樣你就可以獲得工具包的全部功能。
讓我們花點時間重構一下代碼作為一個類:
import wx
class MyFram(wx.Frame):
def __init__(self):
super().__init__(parent=None,title='Hello World')
panel = wx.Panel(self)
label = wx.StaticText(panel,label='Hello World',pos=(0,0))
self.Show()
if __name__ == '__main__':
app = wx.App()
fram = MyFram()
app.MainLoop()
你可以将此代碼用作應用程式的模闆。但是,這個應用程式并沒有做很多事情,是以讓我們花點時間來了解一些你可以添加的其他小部件。
小部件
wxPython工具包有100多個小部件可供選擇。這允許你建立豐富的應用程式,但是要想弄清楚要使用哪個小部件也可能會讓人望而生畏。這就是為什麼wxPython示範非常有用,因為它有一個搜尋過濾器,你可以使用它來幫助你找到可能應用于項目的小部件。
按鈕
wx.Button(self, parent=None, id=None, label=None, pos=None, size=None, style=0, validator=None, name=None)
當你将panel小部件添加到架構中,并且該面闆是架構的唯一子元素時,它将自動展開以填充架構。
下一步是添加一個wx.Button到面闆。幾乎所有小部件的第一個參數都是小部件應該指向哪個父部件。在本例中,你希望文本控件和按鈕位于面闆頂部,是以它是你指定的父控件。
你還需要告訴wxPython将小部件放置在何處,這可以通過pos參數傳入一個位置來實作。在wxPython中,原點位置是(0,0),即父節點的左上角。是以,對于控件,你需要告訴wxPython要将其左上角距左側(x) 0個像素和距頂部(y) 50個像素定位。
然後将按鈕添加一個size同樣是數組形式(x,y),然後你可以給按鈕一個name或者id用來區分其他按鈕。
import wx
class MyFram(wx.Frame):
def __init__(self):
super().__init__(parent=None,title='Hello World',size=(500,500))
panel = wx.Panel(self)
label = wx.StaticText(panel,label='Hello World',pos=(0,0))
#按鈕
btn = wx.Button(panel, label='按鈕1', pos=(0,50), size=(100,50),
name="btn")
self.Show()
if __name__ == '__main__':
app = wx.App()
fram = MyFram()
app.MainLoop()
編輯框
單選框
radioButton = wx.RadioButton(panel, size=(80, 24),
pos=(150, 0), name='radioButton', label='單選框')
多選框
checkBox = wx.CheckBox(panel, size=(80, 24),
pos=(150, 50), name='check', label='多選框')
組合框
comboBox = wx.ComboBox(panel,value='',
pos=(150, 100),name='comboBox',choices=['a','b','c','d'])
滑塊條
slider = wx.Slider(panel,size=(120, 22),pos=(200,
200),name='slider',minValue=1,maxValue=100,value=50)
整數微調框
spinCtrl = wx.SpinCtrl(panel,size=(60, 24),
pos=(200, 250),name='wxSpinCtrl',min=0,max=100,initial=0,style=0)
顔色選擇器
colourPickerCtrl = wx.ColourPickerCtrl(panel, size=(80, 28),
pos=(0, 200), colour=(0, 0, 0, 255),name='colourpicker', style=1)
這樣一個簡單的GUI就講解完了,小部件有很多,了解幾個常用的就可以了,下一篇我們來更深入的學習。
console.log("公衆号:蟲術")
console.log("wx:spiderskill")
歡迎大家前來交流