Python 的出现可以帮助我们快速解决实际的问题,提高工作效率。如果给 Python 脚本加上一个 GUI 的话,不仅可以进一步提升使用效率(不用每次停止运行去修改参数),而且还能把自己程序分享给不懂编程的朋友们使用,的确让人激动不已!

wxPython 是基于 Python 的跨平台 GUI 扩展库,是对 wxWidgets( C++ 编写)封装实现,也是目前最为流行的 GUI 库之一。

本场 Chat 我们就来和大家一起学习 wxPython 的使用方法,运用知识点打造股票行情分析界面,为实现自己的桌面交互界面添砖加瓦。

本场 Chat 主要内容包括:

通过最小框架的实现快速入门 wxPython

界面的布局管理及多页面之间的切换,嵌入 Matplotlib 可以显示各种图形

不仅介绍基本的按钮、文本、工具栏、菜单栏的使用,还有高级的树形列表、Excel 表格、进度条、滑块、日历、对话框的扩展介绍

结合以上知识点,制作一个基础版的股票行情分析界面 ,可以交互查看个股走势

第三方库 wxPython 简介

目前,跨平台的 GUI 工具库较为有名的有 Tk、GTK、Qt 和 wxWidgets,尽管它们之间各有利弊,但很大程度上仍然取决于个人的喜好。

本文推荐使用 wxWidgets,主要原因一方面是因为 wxWidgets 受众群体较大,另一方面 wxWidgets 是标准 C++实现的,不仅上手快,而且在不同平台上与各类工具的兼容较好,能够做到完全的原生界面(Native GUI),是真正的跨平台工具库。

在 Python 环境下 wxPythons 对 wxWidgets 实现了封装,形成了基于 Python 的跨平台 GUI 工具库。

在使用之前我们需要导入 wxPython 工具库,如下所示:

import wx

本文涉及到的日历控件 DatePickerCtrl 已经迁徙至 wx.adv 模块中,需要导入模块,如下所示:

import wx.adv

本文涉及到电子表格控件 Grid,需要导入模块,如下所示:

import wx.grid

本文涉及到树形列表控件 TreeListCtrl,需要导入模块,如下所示:

import wx.gizmos

最小 GUI 框架的实现

在 wxPython 中,GUI 程序由 wx.App、wx.Frame、wx.Panel 以及其他 widget 控件(如 wx.ComboBox, wx.Button)组成的。我们简单地梳理下这些组件的作用以及之间的联系。

一个 GUI 程序只有一个 wx.App 创建的实例用于执行事件循环,至少一个 wx.Frame 创建的实例(Frame)作为其他控件的容器,在 Frame 中至少有一个 wx.Panel 的实例(Panel)用来控制整个 Frame 的布局,而其他的控件则建立在 Panel 之上。

接下来我们逐步来实现最小 GUI 框架程序。其实启动一个最基础的 GUI 程序只需要一个 wx.App 实例、一个 wx.Frame 实例、一个默认生成的 wx.Panel 实例即可,此处例程再额外添加一个 wx.Button 的实例。

代码如下所示:

app = wx.App()#创建应用程序

frame = wx.Frame(None, -1, "Test Frame")

btn = wx.Button(frame, -1, label="Open")#在 frame 上实例化 wx.Button

frame.Show(True)#在调用 app.MainLoop 前显示 frame

app.MainLoop()#进入主事件循环

最基础的 GUI 程序显示效果如图所示:

在实际应用中,我们更倾向于创建自定义的 Frame 类、Panel 类,这样可以更灵活地设计我们所需要的 GUI 界面。

接下来,我们给出真正意义上的最小 GUI 框架程序,任何一个 GUI 程序的开发都可以在这个框架基础之上展开。

完整代码如下所示:

class Panel(wx.Panel):#继承 wx.Panel

def __init__(self, parent):#构造函数

wx.Panel.__init__(self, parent=parent, id=-1)

#此处添加 Panel 代码

class Frame(wx.Frame):#继承 wx.Frame

def __init__(self):#构造函数

wx.Frame.__init__(self, parent=None, title='Test Frame')

self.DispPanel = Panel(self)

# 此处添加各类控件

btn = wx.Button(self.DispPanel, -1, label="Open")

class App(wx.App):#继承 wx.App

def OnInit(self):

self.frame = Frame()

self.frame.Show()

self.SetTopWindow(self.frame)#设置当前 Frame 为应用程序的顶级窗口

return True

if __name__ == '__main__':

app = App()

app.MainLoop()

此处在 Frame 类和 Panel 类中定义了init()方法,可以更灵活地添加自定义的界面风格。

App 类中定义了 OnInit()方法。该方法在应用程序创建后到事件循环开始前被 wx.App 父类调用,需要返回一个为 True 的布尔值。

另外,SetTopWindow()方法用于设置当前 Frame 为应用程序的顶级窗口。

应用程序一旦进入主事件循环,控制权将转交给 wxPython,程序会响应用户的鼠标和键盘事件。当应用程序的所有 Frame 关闭后 app.MainLoop()方法结束并退出程序。

最小 GUI 框架程序运行效果如图所示:

Sizer 布局管理的介绍

GUI 程序的开发中,界面布局是很重要的一个环节,合理的界面布局是能够给予用户良好使用体验的。

绝对坐标的定位方式需要为每一个控件设计大小和位置,修改布局时十分繁琐,而且调整容器尺寸时控件无法对应改变。

幸运的是 wxPython 的布局管理器 Sizer 能对容器中的控件进行更优雅的布局管理,随着容器尺寸的变化自动计算控件最优化的大小和位置。

因此关于界面布局,更方便的是用 Sizer。

在 wxPython 中定义的 Sizer 主要有 wx.BoxSizer,wx.StaticBoxSizer,wx.GridSizer,wx.FlexGridSizer 和 wx.GridBagSizer 这几种,它们都继承于 Wx.Sizer 类,并在此之上各自具有管理窗口布局的规则。

接下来我们以雏形的量化交易系统 GUI 界面为例,来介绍下如何运用 wxPython 的 Sizer 布局管理功能。

wx.BoxSizer 的布局方向分为横向和纵向两种,并且可以在横向或纵向方向上嵌套包含子 Sizer 的布局。此处如目标效果图所示,将 GUI 界面整体布局嵌套为三层:

第一层布局。ParaPanel(参数面板)、DispPanel(显示面板)、CtrlPanel(控件面板)采用 wx.Boxsizer 的横向布局作为第一层布局。

第二层布局。在 ParaPanel 中,将多个 wx.StaticBoxSizer 布局管理器采用 wx.Boxsizer 的纵向排布,作为第二层嵌套布局。同为第二层嵌套布局的还有 CtrlPanel 中,wx.FlexGridSizer 布局管理器和 wx.TextCtrl 控件采用 wx.Boxsizer 的纵向排布。

第三层布局。在 wx.StaticBoxSizer 中将 wx.StaticText、wx.ComboBox 控件作为第三层嵌套排布。以及在 wx.FlexGridSizer 布局管理器指定的四个 wx.Button 控件的排布。

接下来,我们用代码来实现界面布局的目标效果。

1. 创建各个面板

首先在 GUI 框架程序的 Frame 类中分别创建 ParaPanel、DispPanel、CtrlPanel 对象,如下所示:

#创建显示区面板

self.DispPanel = Panel(self) # 自定义

#创建参数区面板

self.ParaPanel = wx.Panel(self,-1)

#创建控制面板

self.CtrlPanel = wx.Panel(self,-1)

排布这三个面板之前,需要先在这三个面板内以嵌套方式实现各自控件的布局。

2.ParaPanel 中嵌套布局

当布局 ParaPanel 中的控件时,需要先创建一个纵向 wx.BoxSizer 布局管理器的实例 vboxsizera 用于排列控件,如下所示:

python 股票行情系统_手把手教你用 Python 打造股票行情分析的 GUI相关推荐

  1. 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...

    话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...

  2. python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码

    原标题:手把手教你使用Python实战反欺诈模型|原理+代码 作者 | 萝卜 来源 | 早起Python(ID: zaoqi-python) 本文将基于不平衡数据,使用Python进行 反欺诈模型数据 ...

  3. 用python画皇冠_手把手教你用 Python 绘制酷炫的桑基图!

    原标题:手把手教你用 Python 绘制酷炫的桑基图! 作者 | 周志鹏 责编 | 郭 芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看! ...

  4. python文本分类_手把手教你在Python中实现文本分类.pdf

    手把手教你在Python 中实现文本分类(附代码.数 据集) 引言 文本分类是商业问题中常见的自然语言处理任务,目标是自动将文本文件分到一个 或多个已定义好的类别中.文本分类的一些例子如下: • 分析 ...

  5. 如何用python开发游戏_手把手教你用Python完成一个控制台小游戏-阿里云开发者社区...

    很多人想学Python程序设计或者已经了解过一点Python程序设计基础,却没办法开发出一个项目. 今天,通过演示一个简单的控制台小游戏制作,手把手教你如何用Python编写一个游戏程序,即便你是个新 ...

  6. 利用python编写祝福_手把手|教你用Python换个姿势,送狗年祝福语

    春节既是一个阖家团圆的节日,也是一个集中问候亲朋好友.了解近况的机会.但是也有很多人过年也不能聚在一起,所以就会会选择发短信这一方式来表达自己的祝福.其中大多人都是复制转发,让人一眼就看穿,显得自己在 ...

  7. python广州地图_手把手教你用Python+可视化工具制作漂亮地图

    作者:J哥 这次呢,我想讲讲地图可视化的内容,以前我也写过用Python的内置库绘制地图,但总感觉不够美观.如何才能在短时间内制作漂亮的可视化地图呢,我觉得Python+可视化工具是不错的选择. 以下 ...

  8. python画图宽度_手把手教你用 Python 绘制酷炫的桑基图!

    作者 | 周志鹏 责编 | 郭   芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?" ...... 笔者本没有 ...

  9. python私人定制_手把手教你学python第十五讲(魔法方法续私人“定制”)

    python无处不对象的深刻理解 前面写了这么多,我觉得有必要从一个大的层面,也就是OO来看问题的本质.只要你调用对象的语法是合乎python的习惯的,那就是可以的,我们以前从来没有像下面这么写过,对 ...

  10. python 金融分析代码_手把手教你以python为工具进行量化金融分析

    量化交易是指借助现代统计学和数学的方法,利用计算机技术进行投资交易的方式. 对于从未接触过量化的人来说,想要了解量化到底是做什么的,关键掌握四部份的内容:Python基础知识.金融知识.技术指标.量化 ...

最新文章

  1. Linux编写脚本查看mod,Linux shell脚本编写基础
  2. react不同环境不同配置angular_DevOps 前端项目(angular、vue、react)打包静态资源生成一份Docker镜像支持部署不同环境...
  3. php引入类的位置,php如何在一个类中引入另外一个类
  4. 求和(莫比乌斯反演)
  5. ubuntu下无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)
  6. Linux中的MAN命令
  7. idea 使用 springboot框架开发时,自定义创建 yml文件,系统无法识别。yml文件没有spring的小叶子。完美解决
  8. Java 算法 新生舞会
  9. 财富自由之路,其实取决于你的工作效率
  10. oracle非管理员锁表,oracle默认管理员的帐号和密码以及密码修改和解除锁定
  11. java过滤器命名_java 过滤指定后缀文件
  12. 管理感悟:测试的目的是什么
  13. vue-cli webpack配置注释
  14. android逆向学习路线(适合新手)
  15. wine模拟器安装xshell
  16. Python:for...in range() 、 for...in enumerate() 、for...in() 、for...in zip()的用法
  17. 在图书馆看到自己出版的图书是一种怎样的体验?
  18. 这不就是微信朋友圈屏蔽功能吗?推特现在才做出来未免太迟了吧
  19. 我的世界电脑正版服务器地址大全,《我的世界》服务器地址大全 各个服务器一览分享...
  20. Prolog系列学习-1

热门文章

  1. Echarts世界国家中英文对照
  2. 牛客练习赛101 B-荒神在此
  3. android系统平板输入法切换,安卓平板电脑怎么样切换输入法?
  4. 读书笔记之《得未曾有》
  5. 汉庭季琦:我用IT精神打造传统产业
  6. matlab 等高线密度,CASTEP获得电荷密度等高线的Matlab作图法
  7. 世界级软件平台企业,永洪科技要的就是这个范儿
  8. 系统架构设计师考试总结
  9. cbac式_CBAC
  10. iOS--相册视频MOV转MP4