使用 wxPython 创建小型文本编辑器

一、安装和下载 wxPython

点击查看

二、简单认识

import wx
# 创建应用程序对象,它负责幕后所有的初始化
app = wx.App()
# 生成 wx框架
# 如果正在创建一个单独窗口,就不需要考虑父部件,使用 None 即可
# title 设置标题,size 确定窗口大小
win = wx.Frame(None,title = "Simple Editor",size = (410,335))
# 显示这个 Frame 框架窗口
win.Show()
# 给这个框架添加标签 pos 代表位置,size 代表窗口大小
loadButton = wx.Button(win,label = "Open",pos = (225,5),size = (80,25))
saveButton = wx.Button(win,label = "Save",pos=(315,5),size=(80,25))
# 创建文本控件
filename = wx.TextCtrl(win,pos = (5,5),size=(210,25))
# 再创建一个文本控件,同时使用 style 参数调整风格
# 联合使用 style=wx.TE_MULTILINE 来获取多行文本区(默认有垂直滚动条) 
# wx.HSCROLL 来获取水平滚动条
contents = wx.TextCtrl(win,pos=(5,35),size=(390,260),
                       style=wx.TE_MULTILINE | wx.HSCROLL)
# 运行这个应用程序
app.MainLoop()

在这里插入图片描述

三、更智能的布局

虽然明确每个组件的几何位置容易理解,但是过程乏味。
可以利用尺寸器管理组件的尺寸,只需要将部件添加到尺寸器上,再加上一些布局参数即可,然后让尺寸器自己管理父组件的尺寸。

import wx
app = wx.App()
win = wx.Frame(None,title = "Simple Editor",size = (410,335))
bkg = wx.Panel(win)
# 不再设置位置坐标
loadButton = wx.Button(bkg,label = "Open")
saveButton = wx.Button(bkg,label = "Save")
filename = wx.TextCtrl(bkg)
contents = wx.TextCtrl(bkg,style=wx.TE_MULTILINE | wx.HSCROLL)
# BoxSizer 布局允许控件排放在按行或列的方式,默认水平排列(wx.HORIZONTAL)
hbox = wx.BoxSizer()
# Add() 方法附加到 sizer 的下一行或列
# proportion 参数根据在窗口改变大小时所分配的空间设置比例
# wx.EXPAND 项目将扩大,以填补提供给它的空间
# filename改变大小时,获取全部的额外空间
hbox.Add(filename,proportion=1,flag=wx.EXPAND) 
# 与左边的控件相隔 5 
hbox.Add(loadButton,proportion=0,flag=wx.LEFT,border=5)
hbox.Add(saveButton,proportion=0,flag=wx.LEFT,border=5)

# 下面两个控件按列垂直排列
vbox = wx.BoxSizer(wx.VERTICAL)
# 上下左右间隔 5
vbox.Add(hbox,proportion=0,flag=wx.EXPAND | wx.ALL,border=5)
vbox.Add(contents,proportion=1,flag=wx.EXPAND | wx.BOTTOM | wx.LEFT |wx.RIGHT,border=5)
# 使用 wx.Panel类的 SetSizer() 方法在面板布局管理器应用
bkg.SetSizer(vbox)
win.Show()
app.MainLoop()

四、加入事件处理

在GUI术语中,用户执行的动作(比如点击按钮)叫做事件,需要让程序注意这些事件并且作出反应。
可以将函数绑定到所涉及的事件可能发生的组件上达到这个效果
当事件发生时,函数会被调用

import wx
# load 函数加载使用
def load(event):
# 文件名使用 filename(小的文本框) 对象的 GetValue 方法获取
    file = open(filename.GetValue())
# 将文本引入文本区
    contents.SetValue(file.read())
    file.close()
# save 函数保存文本使用
def save(event):
# 这个 'w' 标志,用于文件处理部分的 write 方法
    file = open(filename.GetValue(),'w')
    file.write(contents.GetValue())
    file.close()

app = wx.App()
win = wx.Frame(None,title = "Simple Editor",size = (410,335))
bkg = wx.Panel(win)

loadButton = wx.Button(bkg,label = "Open")
# 利用部件的 Bind 方法将事件处理函数链接到给定的事件上
# wx.EVT_BUTTON 表示一个按钮事件
loadButton.Bind(wx.EVT_BUTTON,load)

saveButton = wx.Button(bkg,label = "Save")
saveButton.Bind(wx.EVT_BUTTON,save)

filename = wx.TextCtrl(bkg)
contents = wx.TextCtrl(bkg,style=wx.TE_MULTILINE | wx.HSCROLL)

hbox = wx.BoxSizer()
hbox.Add(filename,proportion=1,flag=wx.EXPAND)
hbox.Add(loadButton,proportion=0,flag=wx.LEFT,border=5)
hbox.Add(saveButton,proportion=0,flag=wx.LEFT,border=5)

vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(hbox,proportion=0,flag=wx.EXPAND | wx.ALL,border=5)
vbox.Add(contents,proportion=1,flag=wx.EXPAND | wx.BOTTOM | wx.LEFT |wx.RIGHT,border=5)

bkg.SetSizer(vbox)
win.Show()
app.MainLoop()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值