Python GUI界面搭建


創建一個GUI窗體最基本的思路:
1.先導入wx模塊:import wx
2.創建一個程序:app=wx.App() #實例化主循環
3.創建完程序后,接着建立一個窗口(Frame):win= wx.Frame(None)
4.創建完窗口后,需要顯示出來:win.Show()
5.最后運行主程序:app.MainLoop()
簡單實例:
代碼:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wx
app=wx.App()
win= wx.Frame(None,title='Hello, Word')
win.Show()
app.MainLoop()

實戰:制作一個簡易記事本
1.界面效果圖如下:
創建界面代碼:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import wx
#1.先畫界面
app=wx.App()
win= wx.Frame(None,title='記事本shelly') #創建一個框體,設置標題名
win.Show() #顯示出來
#創建2個按紐
openButton = wx.Button(win,label='Open',pos=(225,5),size=(80,25))
saveButton = wx.Button(win,label='Save',pos=(315,5),size=(80,25))
#創建2個文本框
fileName = wx.TextCtrl(win,pos=(5,5),size=(210,25))
fileContent = wx.TextCtrl(win,pos=(5,35),size=(390,260),style=wx.TE_MULTILINE | wx.HSCROLL)
app.MainLoop()

2.界面畫好了,開始實現功能效果
思路: 組件----滿足-----》條件------觸發-----》事件

import wx
#1、定義事件函數
#事件函數有且只有一個參數,叫event
#創建兩個事件函數
#定義一個事件綁定到對應的按紐上
def load(event):
path = fileName.GetValue()
with open(path,"r",encoding="utf-8") as f:
#encoding 設置文件打開時指定為utf8編碼,避免寫文件時出現編碼錯誤
fileContent.SetValue(f.read())
file.close()
def save(event):
file = open(fileName.GetValue(),'w')
file.write(fileContent.GetValue())
file.close()

#1.先畫布即制作界面
app=wx.App()
win= wx.Frame(None,title='記事本shelly')
win.Show()
#創建一個打開按紐
openButton = wx.Button(win,label='Open',pos=(225,5),size=(80,25))
#打開按紐綁定事件函數,處理操作
openButton.Bind(wx.EVT_BUTTON,load)

saveButton = wx.Button(win,label='Save',pos=(315,5),size=(80,25))
openButton.Bind(wx.EVT_BUTTON,save)

fileName = wx.TextCtrl(win,pos=(5,5),size=(210,25))
fileContent = wx.TextCtrl(win,pos=(5,35),size=(390,260),style=wx.TE_MULTILINE | wx.HSCROLL)
app.MainLoop()

wx 組件介紹
可參照標准wxpython 文檔:》》》》》》WxPython標准文檔在線閱讀
1、frame(窗口)

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

2、TextCtrl(文本框)

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

3、Button(按鈕)

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

4.尺寸器

按照上面的GUI代碼有一個缺陷,由於我們各個組件都固定了大小,因此在框體拉伸時,對應的組件不會對應進行拉伸,比較影響用戶體驗。
為了解決這個問題,我們可以使用尺寸器進行布局,類似於HTML的CSS樣式。

1、BoxSizer(尺寸器)

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

2、步驟

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

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

import wx
#1、定義事件函數
#事件函數有且只有一個參數,叫event
#創建兩個事件函數
#定義一個事件綁定到對應的按紐上
def load(event):
path = fileName.GetValue()
with open(path,"r",encoding="utf-8") as f:
#encoding 設置文件打開時指定為utf8編碼,避免寫文件時出現編碼錯誤
fileContent.SetValue(f.read())
file.close()
def save(event):
file = open(fileName.GetValue(),'w')
file.write(fileContent.GetValue())
file.close()
#1.先畫界面
app=wx.App()
win= wx.Frame(None,title='記事本shelly')
#新增一張畫布
panel = wx.Panel(win)

#創建一個打開按紐
openButton = wx.Button(panel,label='Open',pos=(225,5),size=(80,25))
#打開按紐綁定事件函數,處理操作
openButton.Bind(wx.EVT_BUTTON,load)

saveButton = wx.Button(panel,label='Save',pos=(315,5),size=(80,25))
openButton.Bind(wx.EVT_BUTTON,save)
#修改控件的父對象改成panel 而不是Frame,Panel的父對象是Frame
fileName = wx.TextCtrl(panel,pos=(5,5),size=(210,25))
fileContent = wx.TextCtrl(panel,pos=(5,35),size=(390,260),style=wx.TE_MULTILINE | wx.HSCROLL)
#實例化一個尺寸器,默認水平
box = wx.BoxSizer()
box.Add(fileName,proprotion = 5,flag = wx.EXPAND|wx.ALL,border = 3)
#proportion:相對比例
#flag:填充的樣式和方向,wx.EXPAND為完整填充,wx.ALL為填充的方向
#border:邊框
box.Add(saveButton,proprotion = 2,flag = wx.EXPAND|wx.ALL,border = 3)
box.Add(openButton,proprotion = 2,flag = wx.EXPAND|wx.ALL,border = 3)
v_box = wx.BoxSizer(wx.VERTICAL)
v_box.Add(box,proprotion = 1,flag = wx.EXPAND|wx.ALL,border = 3)
v_box.Add(fileContent,proprotion = 5,flag = wx.EXPAND|wx.ALL,border = 3)
panel.SetSizer(v_box) #設置主尺寸
win.Show()
app.MainLoop()


免責聲明!

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



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