分享

Python如何开发桌面软件

 心灵地图sxh 2019-01-27

Python可快速写脚本、可用于运维、可用于后台开发、可写爬虫、可处理图片视频、可游戏开发、可用于大数据计算、可机器学习、可做硬件开发等等等。

那怎么能少了桌面软件开发,也就是GUI。


1、GUI框架的选择

Python用于桌面开发的界面库有不少:Kivy、PyQt、gui2Py、libavg、wxPython...

试验一下,wxPython我用起来比较舒服,而且wxPython的帮助文档和Demo比较详细(不用问是不是英文的,肯定是)。

目前wxPython尚未支持py3,使用py3的童靴可以试试PyQt4或PyQt5。


2、下载和安装wxPython

打开https://www./download.php,在他们的官网下载对应版本的。下载完成后直接安装即可。

不知道自己的Python版本?如下代码可以查看:

  1. import sys
  2. print(sys.version)

这里也建议下载它的demo和docs。有利于我们学习wxPython。

下载demo,打开其中的demo.py文件。

20170204/20170204093659263.png

还可以下载samples看看它的一些例子。

20170204/20170204093806508.png


wxPython各种文档都比较齐全。遇到不会的可以查看demo和帮助文档。用的人也不少,很多问题都可以搜索出来。(不要问搜索不到,如果你是用某度的话。推荐用雅虎或谷歌,或者在Stack Overflow上搜索)

可以参考如下文章:

简单入门:http://www./articles/nUfuIjI

控件使用:http://justcoding./blog/904219


这里有个地方需要注意一下,关于wxPython的app。

wx.PySimpleApp()已经过时了(打包发布会出错),建议使用自定义的wx.App类。


3、可视化编辑器

如果纯粹自己手写代码写界面,效率低下,调试麻烦而且界面简陋。

有个利器可以帮助我们快速开发界面:wxFormBuilder。


打开,https:///projects/wxformbuilder/

下载wxFormBuilder最新的安装包,下载完成后直接安装即可。


打开wxFormBuilder可以看到一个英文界面,该界面比较简单。下面是我最近的项目创建的界面。

20170204/20170204100639924.png

左边是结构树,右边是属性窗口,中间是设计界面,上面是组件。

重点是组件部分。一般先点Forms创建空白窗口。然后再点Layout布局,添加布局。

添加布局之后,才能在Common公共控件中添加控件。

这个使用也比较简单,工具栏还可以快速设置控件的布局。


可参考如下文章:

http://www./xkjy3000/archive/2012/10/31/194120.html

http://yuyongid.blog.51cto.com/10626891/1717514


4、添加业务逻辑代码

我们前面用wxFormBuilder写的是界面代码。还需要写具体的业务逻辑代码。

我一般将这里两个分离。

wxFormBuilder设计完成之后,有Python代码:

20170204/20170204101721684.png

直接复制全部代码,在某个文件夹中新建forms.py文件,粘贴代码。

或者打开该wxFormBuilder项目所在的位置,找到Python文件。将其改个名字就可以用。

20170207/20170207165010300.png


接着,在该文件夹创建一个程序入口文件main.py。代码如下:

  1. #coding:utf-8
  2. import wx
  3. from forms import frame_main
  4.  
  5. class App(wx.App):
  6.     def OnInit(self):
  7.         self.frame = frame_main(None)
  8.         self.frame.Show()
  9.         self.SetTopWindow(self.frame)
  10.         return True
  11.  
  12. if __name__ == '__main__':
  13.     app = App()
  14.     app.MainLoop()

引用刚才写的界面代码,并显示。可以先执行测试看能否正常打开。

20170204/20170204102131324.png


可以正常打开之后,在该文件夹下创建events.py文件,该文件我用于写事件和绑定事件的相关代码。例如代码如下:

  1. #coding:utf-8
  2. import wx
  3.  
  4. #主窗体事件
  5. class frame_main_events():
  6.     def __init__(self, frame):
  7.         self.frame = frame
  8.         
  9.         #设置图标
  10.         self.frame.SetIcon(wx.Icon(u'converter.ico', wx.BITMAP_TYPE_ICO))
  11.         
  12.         #绑定按钮点击代码
  13.         self.frame.btn_run.Bind(wx.EVT_BUTTON, self.btn_run_OnButtonClick)
  14.  
  15.         #窗体关闭事件
  16.         self.frame.Bind(wx.EVT_CLOSE, self.frame_main_OnClose)
  17.         
  18.     def frame_main_OnClose(self, event):
  19.         """窗体关闭"""
  20.         #关闭提示
  21.         dlg = wx.MessageBox(message=u'Do you want to close?', caption=u'tip', style=wx.YES_NO|wx.NO_DEFAULT)
  22.         if dlg == wx.YES:
  23.             frame = event.GetEventObject()
  24.             frame.Destroy()
  25.         event.Skip()
  26.         
  27.     def btn_run_OnButtonClick(self, event):
  28.         """执行按钮"""
  29.         #弹窗测试
  30.         wx.MessageBox(message=u'text', caption=u'caption')
  31.         event.Skip()


再修改main.py文件的代码:

  1. #coding:utf-8
  2. import wx
  3. from forms import frame_main
  4. from events import frame_main_events
  5.  
  6. class App(wx.App):
  7.     def OnInit(self):
  8.         #加载窗体
  9.         self.frame = frame_main(None)
  10.         #绑定事件
  11.         self.events = frame_main_events(self.frame)
  12.         
  13.         self.frame.Show()
  14.         self.SetTopWindow(self.frame)
  15.         return True
  16.  
  17. if __name__ == '__main__':
  18.     app = App()
  19.     app.MainLoop()


即可实现刚刚写的代码,绑定窗体关闭事件和下面的按钮的点击事件。

20170204/20170204103917906.png


至于怎么绑定事件,可以参考wxFormBuilder属性窗口的事件(Events)选卡。

双击对应的事件,会自动添加一个空事件和绑定事件的代码。你把事件代码写在里面也可以,就是不方便维护。

最后,注意每个事件末尾都要加event.Skip()。该句代码在一个事件绑定多个方法会有作用。而且不加的话,可能会引发一些问题。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多