天天看點

wxPython系列一建立簡單GUI及基礎小部件運用簡介練習一小部件

簡介

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消息使用以下建構步驟

  1. 導入 wx 子產品
  2. 定義應用程式類的一個對象
  3. 建立一個供使用者互動的視窗(wx.Frame) ,并給出構造标題和尺寸參數。
  4. 使用一個面闆(wx.Panel),以便架構的背景顔色是正确的灰色陰影。
  5. 添加一個靜态文本對象,以顯示 ‘Hello World’在視窗内的任意位置。
  6. 通過show()方法激活架構視窗。
  7. 輸入應用程式對象的主事件循環。
#導入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()
           
wxPython系列一建立簡單GUI及基礎小部件運用簡介練習一小部件

預設情況下,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()
           
wxPython系列一建立簡單GUI及基礎小部件運用簡介練習一小部件

編輯框

單選框

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)
           
wxPython系列一建立簡單GUI及基礎小部件運用簡介練習一小部件

這樣一個簡單的GUI就講解完了,小部件有很多,了解幾個常用的就可以了,下一篇我們來更深入的學習。

console.log("公衆号:蟲術")
console.log("wx:spiderskill")
歡迎大家前來交流