windows下,基于python3的wxpython体验+cxfreeze6.0使用

文章目录

    • wxpython安装
    • wxformbuilder安装
    • wxpython的使用
      • frame
      • window
      • sizer
      • event
    • wxformbuilder使用的一点建议
    • cxfreeze的一点使用技巧

wxpython安装

Wx Python的安装根据自己的系统就可以直接安装,跟平时使用的库是一样的。没什么好说的。

wxformbuilder安装

在下面网址的files页面,选择自己的系统和python对应版本就可以下载了。
wxformbuilder下载
这个东西的安装和一般的app安装是一样的。

wxpython的使用

真的很简单,和qt一样简单,我其实是先学了qt,再学这个的,当然我也知道qt有python版的,但是我没用的原因是,据说qt比wxpython的性能差,因为我的需求,所以放弃了qt。再来学学wx。想到自己一直没有过写博客的经历,第一次写,想让自己做一些输出,巩固学到的东西。
首先,需要了解wx的下面几个类。

  • frame
  • windows
  • sizer
  • event
    这几个东西搞懂了,基本就成型了。

frame

wx的逻辑除了信号和槽这两方面和qt有区别,其他方面几乎一摸一样,特别是逻辑上。wx的逻辑是,建立一个窗口应用程序,并以事件的方式,一直循环监控窗口,在程序中,写frame。所谓架构,其实就是一个主窗口,一个主程序需要一个主窗口

#创建主应用程序
App = wx.App()
#向程序中添加框架,参数是指指定父窗口,参数id,-1指默认id,和窗口标题
frameT = wx.Frame(None,-1,name=‘窗口标题’)
#然后让窗口显示
frameT.Show()
#最后主程序循环监控事件
App.MainLoop()

如此简单,一个主窗口框架就建立好了。

window

所谓窗口,就是一系列控件,像按钮,标签,文本框等等,都是window的子类,这些窗口只要指定父窗口,就可以放置在其中

#创建一个按钮,放在主窗口中,并设置其现实的文本
btn = wx.Button(frameT,label=‘这是一个按钮’)

逻辑都是这样,大家需要什么空间去查一下就可以了,而且有wxformbuilder,这些ui设计上都可以直接通过图形界面设置好,不要太简单。

sizer

这就是一个布局管理器,和qt中的layout是一样的,sizer可以嵌套,可以往里面放不同的window。

它的逻辑也很简单,如下

#新建一个sizer对象,这是一个删格化的sizer,2行2列,垂直和水平间隙都是5
grid = GridSizer(cols=2,rows=2,vgap=5,heap=5)
#新建window
btn1 = wx.Button(frameT,label=1)
btn2 = wx.Button(frameT,label=2)
bt3 = wx.Button(frameT,label=3)
bt4 = wx.Button(frameT,label=4)
#注意创建window的时候,其父窗口不是sizer,sizer只是一个容器,并非窗口或者frame
#然后就可以将window添加到sizer中,有两种方式,一种是一个个添加,一种是把window都放在一个数组中一次性添加。都可以设置在sizer中的放置方式,对齐等等,格式基本都在这里设置。
grid.Add(btn1,0,wx.EXPAND)
grid.AddMany([(btn2,0,wx.EXPAND),(bt3,0,wx.EXPAND)])

其实这些东西都可以在wxformbuilder中设置完成,但是作为开发人员怎么能不秀一把code呢。

event

事件也做的相当简单,我也觉得和qt的信号和槽如出一辙,其实我觉得这种设计比信号和槽更高级。
事件的逻辑很简单

#直接将事件和window绑定,也有两种方式,一种是主frame来控制,一种是直接绑定到window
frameT.Bind(wx.EVT_BUTTON,onClick, btn1)
bt2,Bind(wx.EVT_BUTTON,onClick2)
#然后定义,window的事件发生时出发的操作
def onClick():
    print(‘i am deer’)
#就这么简单
def onClick2():
    print(‘I am deer 2)

将事件和window绑定,当事件发生时,触发相应的操作。wx很奇怪,鼠标点击button事件叫EVT_BUTTON,不是叫click,可以去查一下官方文档,有什么事件。

wxformbuilder使用的一点建议

  • 生成的python代码需要手动复制到新建py文件中,记得设置编码格式utf-8
  • frame是必须添加的第一项内容
  • 显示内容不是text属性,是label属性。
  • 输入文本框的值只能用SetValue和GetValue两个方法来设置和读取(当你需要这么做的时候)
  • 窗口初始化的时候,可以手动更改代码,让frame类初始化的时候设置窗口名
  • wxformbuilder有些和wxpython的函数些许不一样,有错误别慌,稍微改一下就好了。

cxfreeze的一点使用技巧

我使用的是6.0版本,bug还挺多的,不过还是能够征服的。我比较懒,对我来说这些只是工具而已,所以比起那些需要写配置的打包程序,我很反感。不过大家可以试试exe打包的另外两种方式py2exe和pyinstall,听说在python3下面不好用,也不知道真假。
首先声明,cxfreeze是一个python库。所以网上很多都是骗人的(其实是他们不知道而已,哈哈)。
可以用pip安装下载的cxfreeze,库装好了,就去python安装目录下(或者conda),在Script目录下有一个cxfreeze.py运行它,

python cxfreeze.py install

这一步是为了将这个工具加入系统命令,其实还是一个python库。
装好了就可以按照大家说的打包了

cxfreeze 要打包的py文件 ——target-dir 存放目录 ——target-name 打包好的exex文件名 ——icon 设置exe的图标 ——base-script 要想exe不从cmd运行就加上它,指定其值为win32GUI最好啦,其实就是exe运行时不会出现一个cmd

当然cxfreeze也是可以直接设置配置文件的,但他会提示你输入内容,就是你直接根据提示输入参数,就能直接生成配置文件。命令是cxfreeze-quickstart 可以按照提示直接运行,也可以

cxfreeze setup.py build

最后一点,cxfreeze是一个库,所以可以在Script目录下运行

python cxfreeze.py 要打包的py文件 后面接参数

最后说一点。打包的时候,会出现很多问题,主要原因就是打包的库不完整,些许的不兼容等,大家只要知道,只要出现找不到模块的,就去python安装目录那考到lib目录下就可以了。像scipy和numpy就不行,得拷贝过去。若是出现“_distributor等”模块找不到,你就去scipy和numpy的安装目录里,把init.py文件中对“_distributor”的导入注释掉就行了,无影响。
————-
其实我就学了一天,写了个小程序,理解没有那么深入,不过按照我的思路,我想快速入门不是问题。

你可能感兴趣的:(python)