wxpython模塊詳解


 

一、python gui(圖形化)模塊介紹:

  Tkinter :是python最簡單的圖形化模塊,總共只有14種組建

  Pyqt     :是python最復雜也是使用最廣泛的圖形化

  Wx       :是python當中居中的一個圖形化,學習結構很清晰

  Pywin   :是python windows 下的模塊,攝像頭控制(opencv),常用於外掛制作

二、wx模塊的安裝:

1
C:\Users\Administrator> pip install wxpython

三、圖形化介紹

……

 

 

四、wx主要組件介紹

1、frame(窗口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
參數:
 
parent  =  None  #父元素,假如為None,代表頂級窗口
 
id  =  None  #組件的標識,唯一,假如id為-1代表系統分配id
 
title  =  None  #窗口組件的名稱
 
pos  =  None  #組件的位置,就是組件左上角點距離父組件或者桌面左和上的距離
 
size  =  None  #組件的尺寸,寬高
 
style  =  None  #組件的樣式
 
name  =  None  #組件的名稱,也是用來標識組件的,但是用於傳值

2、TextCtrl(文本框)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
參數:
 
parent  =  None  #父元素,假如為None,代表頂級窗口
 
id  =  None  #組件的標識,唯一,假如id為-1代表系統分配id
 
value  =  None    #文本框當中的內容
          GetValue  #獲取文本框的值
          SetValue  #設置文本框的值
 
pos  =  None  #組件的位置,就是組件左上角點距離父組件或者桌面左和上的距離
 
size  =  None  #組件的尺寸,寬高
 
style  =  None  #組件的樣式
 
validator  =  None  #驗證
 
name  =  None  #組件的名稱,也是用來標識組件的,但是用於傳值

3、Button(按鈕)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
參數:
 
parent  =  None  #父元素,假如為None,代表頂級窗口
 
id  =  None  #組件的標識,唯一,假如id為-1代表系統分配id
 
lable  =  None  #按鈕的標簽
 
pos  =  None  #組件的位置,就是組件左上角點距離父組件或者桌面左和上的距離
 
size  =  None  #組件的尺寸,寬高
 
style  =  None  #組件的樣式
 
validator  =  None  #驗證
 
name  =  None  #組件的名稱,也是用來標識組件的,但是用於傳值

其它組件的參數類似

4、創建窗口基礎代碼

1
2
3
4
5
基本創建窗口代碼說明:<br><br> import  wx  #引入wx模塊<br>
app  =  wx.App()  #實例化一個主循環<br>
frame  =  wx.Frame( None #實例化一個窗口<br>
frame.Show() #調用窗口展示功能<br>
app.MainLoop() #啟動主循環

效果如下圖:  

五、Gui編寫簡單實例

實現如下一個GUI界面,在上面文本框中輸入文本文件地址,點擊“打開”按鈕后將文本文件內容顯示在下面的文本框中。

1、圖形化編寫

1
2
3
4
5
6
7
8
import  wx
 
app  =  wx.App()
frame  =  wx.Frame( None ,title  =  "Gui Test Editor" ,pos  =  ( 1000 , 200 ),size  =  ( 500 , 400 ))
 
path_text  =  wx.TextCtrl(frame,pos  =  ( 5 , 5 ),size  =  ( 350 , 24 ))
open_button  =  wx.Button(frame,label  =  "打開" ,pos  =  ( 370 , 5 ),size  =  ( 50 , 24 ))
save_button  =  wx.Button(frame,label  =  "保存" ,pos  =  ( 430 , 5 ),size  =  ( 50 , 24 ))
content_text= wx.TextCtrl(frame,pos = (5,39),size = (475,300),style = wx.TE_MULTILINE)  # wx.TE_MULTILINE可以實現換行功能,若不加此功能文本文檔顯示為一行顯示
1
frame.Show() app.MainLoop()

2、事件綁定

1
2
3
4
5
6
7
8
9
10
11
1 、定義事件函數
     事件函數有且只有一個參數,叫event
     
def  openfile(event):
     path  =  path_text.GetValue()
     with  open (path, "r" ,encoding = "utf-8" ) as f:   #encoding 設置文件打開時指定為utf8編碼,避免寫文件時出現編碼錯誤
         content_text.SetValue(f.read())
 
2 、綁定出發事件的條件和組件
 
open_button.Bind(wx.EVT_BUTTON,openfile)

3、完整代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#coding:utf-8
import  wx
 
def  openfile(event):      # 定義打開文件事件
     path  =  path_text.GetValue()
     with  open (path, "r" ,encoding = "utf-8" ) as f:   # encoding參數是為了在打開文件時將編碼轉為utf8
         content_text.SetValue(f.read())
 
app  =  wx.App()
frame  =  wx.Frame( None ,title  =  "Gui Test Editor" ,pos  =  ( 1000 , 200 ),size  =  ( 500 , 400 ))
 
path_text  =  wx.TextCtrl(frame,pos  =  ( 5 , 5 ),size  =  ( 350 , 24 ))
open_button  =  wx.Button(frame,label  =  "打開" ,pos  =  ( 370 , 5 ),size  =  ( 50 , 24 ))
open_button.Bind(wx.EVT_BUTTON,openfile)     # 綁定打開文件事件到open_button按鈕上
 
save_button  =  wx.Button(frame,label  =  "保存" ,pos  =  ( 430 , 5 ),size  =  ( 50 , 24 ))
 
content_text =  wx.TextCtrl(frame,pos  =  ( 5 , 39 ),size  =  ( 475 , 300 ),style  =  wx.TE_MULTILINE)
#  wx.TE_MULTILINE可以實現以滾動條方式多行顯示文本,若不加此功能文本文檔顯示為一行
 
frame.Show()
app.MainLoop()

  

  六、尺寸器

按照上面的GUI代碼有一個缺陷,由於我們各個組件都固定了大小,因此在框體拉伸時,對應的組件不會對應進行拉伸,比較影響用戶體驗。

為了解決上述這個問題,我們可以使用尺寸器進行布局,類似於HTML的CSS樣式。

1、BoxSizer(尺寸器)

  • 尺寸器作用於畫布(panel)
  • 默認水平布局
  • 垂直布局可以調整
  • 按照相對比例

2、步驟

  • 實例化尺寸器(可以是多個)
  • 添加組件到不同尺寸器中
  • 設置相對比例、填充的樣式和方向、邊框等參數
  • 設置主尺寸器

3、將上面代碼通過尺寸器改寫

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#coding:utf-8
import  wx
 
def  openfile(event):      # 定義打開文件事件
     path  =  path_text.GetValue()
     with  open (path, "r" ,encoding = "utf-8" ) as f:   # encoding參數是為了在打開文件時將編碼轉為utf8
         content_text.SetValue(f.read())
 
app  =  wx.App()
frame  =  wx.Frame( None ,title  =  "Gui Test Editor" ,pos  =  ( 1000 , 200 ),size  =  ( 500 , 400 ))
 
panel  =  wx.Panel(frame)
 
path_text  =  wx.TextCtrl(panel)
open_button  =  wx.Button(panel,label  =  "打開" )
open_button.Bind(wx.EVT_BUTTON,openfile)     # 綁定打開文件事件到open_button按鈕上
 
save_button  =  wx.Button(panel,label  =  "保存" )
 
content_text =  wx.TextCtrl(panel,style  =  wx.TE_MULTILINE)
#  wx.TE_MULTILINE可以實現以滾動條方式多行顯示文本,若不加此功能文本文檔顯示為一行
 
box  =  wx.BoxSizer()  # 不帶參數表示默認實例化一個水平尺寸器
box.Add(path_text,proportion  =  5 ,flag  =  wx.EXPAND|wx. ALL ,border  =  3 # 添加組件
     #proportion:相對比例
     #flag:填充的樣式和方向,wx.EXPAND為完整填充,wx.ALL為填充的方向
     #border:邊框
box.Add(open_button,proportion  =  2 ,flag  =  wx.EXPAND|wx. ALL ,border  =  3 # 添加組件
box.Add(save_button,proportion  =  2 ,flag  =  wx.EXPAND|wx. ALL ,border  =  3 # 添加組件
 
v_box  =  wx.BoxSizer(wx.VERTICAL)  # wx.VERTICAL參數表示實例化一個垂直尺寸器
v_box.Add(box,proportion  =  1 ,flag  =  wx.EXPAND|wx. ALL ,border  =  3 # 添加組件
v_box.Add(content_text,proportion  =  5 ,flag  =  wx.EXPAND|wx. ALL ,border  =  3 # 添加組件
 
panel.SetSizer(v_box)  # 設置主尺寸器
 
frame.Show()
app.MainLoop()

  通過尺寸器進行布局,無論寬體如何拉伸,內部的組件都會按比例進行變化。

        

 

 

原文鏈接:

https://www.cnblogs.com/morries123/p/8568666.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM