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

2020-11-13 12:01:30

簡介

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

在這裡插入圖片描述

預設情況下,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")
歡迎大家前來交流