簡介
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()

編輯框
text = wx.TextCtrl(panel,size=(200,20),pos=(0,150),name='text1')
單選框
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")
歡迎大家前來交流
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/214229.html
標籤:其他
