设为首页 加入收藏

TOP

Python:界面开发,wx入门篇(三)
2023-07-25 21:27:45 】 浏览:58
Tags:Python
ize, 0 ) self.m_staticText2.Wrap( -1 ) bSizer1.Add( self.m_staticText2, 0, wx.ALL, 5 ) bSizer5 = wx.BoxSizer( wx.VERTICAL ) self.m_listCtrl_info = wx.ListCtrl( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LC_REPORT ) bSizer5.Add( self.m_listCtrl_info, 1, wx.ALL|wx.EXPAND, 5 ) bSizer1.Add( bSizer5, 1, wx.EXPAND, 5 ) self.SetSizer( bSizer1 ) self.Layout() self.Centre( wx.BOTH ) def __del__( self ): pass

为了使用 wxFormBuilder 构建器生成的代码,可以简单修改前面的代码,如下

// main.py

import wx
import w_frame_xrc

app = wx.App()
window = w_frame_xrc.w_frame_xrc(parent=None)
window.Show()
app.MainLoop()

执行程序

python main.py

9.JPG

现在界面看起来有点内容了!

实现逻辑

前面的界面还不具备任何的实际功能,为了让其执行设计的功能,添加额外的逻辑在所难免。

比如,点击按钮 添加,就触发动作把输入框中的名字添加到下方的列表中,并清空输入框,因此需要在原来的窗口类 w_frame_xrc.w_frame_xrc 基础上添加一些逻辑功能代码。

不过,wxFormBuilder 构建出来的代码一般不建议直接修改,所以先对原来的窗口类 w_frame_xrc.w_frame_xrc 进行派生,再在派生类中补充逻辑功能代码。派生类的代码存在单独的源文件 w_frame.py 中。

// w_frame.py

import wx
import w_frame_xrc

class w_frame(w_frame_xrc.w_frame_xrc):
    def __init__(self, parent):
        super(w_frame, self).__init__(parent)

        self.m_listCtrl_info.ClearAll()
        self.m_listCtrl_info.InsertColumn(0, u'名字', width=140)

        self.m_button_add.Bind(wx.EVT_BUTTON, self.on_button_add)

    def on_button_add(self, event):
        value = self.m_textCtrl_name.GetValue()
        if not value:
            print("You didn't enter anything!")
        else:
            self.m_listCtrl_info.InsertItem(self.m_listCtrl_info.GetItemCount(), value)
            self.m_textCtrl_name.Clear()

可以看到,当控件有特定的事件需要绑定连接到处理句柄时,可以通过 Bind() 方法,传入 EVT_xxx 事件类型和处理句柄(可调用对象,比如,函数等)。如果需要将已绑定的某个事件断开连接,可以将处理句柄位置参数设为 None 即可。

然后,main.py 也需要稍作修改,如下

// main.py

import wx
import w_frame

app = wx.App()
window = w_frame.w_frame(parent=None)
window.Show()
app.MainLoop()

好了,现在再来测试一下刚添加的逻辑,程序启动后往里添加几个名单看看吧。

python main.py

10.JPG

部署发布

目前来看,工程里都是一些以源码文件形式存在的脚本,但是在最终用户使用时,都是习惯于直接双击一个 exe 文件来启动软件进程。

下面就介绍一种对 Python 脚本工程打包的工具,目标是最终输出一个可执行的 exe 文件。

这个工具就是 pyinstaller,使用之前需要确认一下自己的环境里是否已经安装有这个第三方包,还用指令 pip list 即可查看。

如果确认过没有,那么用下面的指令可以安装

pip install pyinstaller

假设已经安装完毕,直接打包。选项 -F 后边输入启动脚本文件

pyinstaller -F main.py

启动打包过程之后,工程目录下面会自动生成一个新目录 dist 用于存放输出的目标文件。由于上面的打包指令没有指明输出的目标文件名,所以默认输出为脚本文件同名,如 main.exe。

如果需要指明输出的目标文件名,可以加上选项 -n。比如要输出目标为 demo.exe,可以这样

pyinstaller -F main.py -n demo

也许有的同学喜欢让打包的输出文件带上图标,那么可以加上选项 -i。比如工程目录里有一份图标文件 logo.ico,需要让打包后输出文件带上这个图标,可以这样

pyinstaller -F main.py -n demo -i logo.ico

打包完毕,双击程序 demo.exe,可能会发现在运行起来的软件背景里,老是有个命令行的窗口,这样子真的很碍眼!

怎样把终端窗口给隐藏掉呢?打包的时候带上选项 -w,这样

pyinstaller -F main.py -n demo -i logo.ico -w

网上有些同学喜欢吐槽 pyinstaller 打包出来的目标文件体积过大,关于这个问题的解决思路是,工程开发(包括目标文件打包输出)应该在配置好的单独虚拟环境下进行,环境中不应该安装任何不需要的第三方包!

全文到这里算是结束了,欢迎你的留言!

?工程代码仓库:?git@github.com:ifi-leung/python_gui_wx.git

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇python实战-解析swagger-api接口.. 下一篇【脚本项目源码】Python制作桌面..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目