【Python图形化】对wxPython的初步认识和使用

这是我从0开始学习wxPython时边学边写的笔记,主要是对于wxPython的初步认识。

下面讲的是官方文档中的第一个案例,参考的是这位大佬的文章:
https://blog.csdn.net/hekaiyou/article/details/107360100

安装wxPython

通过pip命令来安装:

pip install wxPython

创建最简单的窗口

import wx

# 创建一个应用程序对象
app = wx.App()      
# 创建一个框架,框架就是一个窗口,其大小和位置(通常)可以由用户更改。
frm = wx.Frame(None,title="Hello World")	# 用title指定窗口名
# 展示框架(窗口)
frm.Show()
# 启动事件循环,将程序暂停在此处,而不会因代码执行完毕而停止
app.MainLoop()

在这里插入图片描述

wx.App() 的作用是:

  • 引导 wxPython 系统并初始化底层 GUI 工具包
  • 设置和获取应用程序范围的属性
  • 实现原生窗口系统主消息或事件循环,并将事件分发给窗口实例

每个 wx 应用程序都必须有一个单独的 wx.App 实例,并且所有 UI 对象的创建都应该在创建 wx.App 对象之后,以确保 GUI 平台和 wxWidgets 具有已完全初始化。

wx.Frame的详细参数见此处:https://my.oschina.net/mutour/blog/33063?fromerr=rlll4KZ8

封装自定义框架(窗口)

添加面板

面板是用来存放控件的,如:按钮、文本框等。

import wx

class HelloWorld(wx.Frame):
    """
    自定义的HelloWorld框架
    """
    def __init__(self, *args, **kw):
        # 调用父类的 __init__ 方法
        super().__init__(*args, **kw)
        # 在框架中创建一个面板
        pnl = wx.Panel(self)

if __name__ == '__main__':
    app = wx.App()
    # 调用自定义框架
    frm = HelloWorld(None, title='Hello World')
    frm.Show()
    app.MainLoop()

效果如图:
在这里插入图片描述

添加控件

    def __init__(self, *args, **kw):
        # 调用父类的 __init__ 方法
        super().__init__(*args, **kw)
        # 在框架中创建一个面板
        pnl = wx.Panel(self)
        # 在面板上放一个静态文本
        st = wx.StaticText(pnl, label="Hello World")   # StaticText()用于显示一行或多行只读文本,并作为一个控件返回
        font = st.GetFont()     # 获取控件字体
        font.PointSize += 10    # 字体增加10, 默认为9
        font = font.Bold()      # 字体加粗,接收返回值
        st.SetFont(font)        # 设置控件字体,否则将不会生效

wxpython之StaticText最全介绍参考此处https://blog.csdn.net/qq_41639829/article/details/106075448

在这里插入图片描述

创建调整器

调整器(sizer)可用来管理控件的布局,sizer可以进行嵌套,如同HTML中的<div>标签。

    def __init__(self, *args, **kw):
        …… ……
        # 创建一个调整器(sizer)来管理控件的布局
        sizer = wx.BoxSizer(wx.VERTICAL)	# 参数用来指定sizer中子控件的排列方向,(垂直方向)wx.VERTICAL 或(水平方向) wx.HORIZONTAL
        sizer.Add(st, wx.SizerFlags().Border(wx.TOP | wx.LEFT, 25))	# 将静态文本控件加入sizer并设置布局
        pnl.SetSizer(sizer)		# 将sizer加入面板

在这里插入图片描述
关于wx.BoxSizer() 的详细使用参见https://blog.csdn.net/igolang/article/details/9397175

添加菜单栏和状态栏 并 绑定事件

    def __init__(self, *args, **kw):
        …… ……
        # 创建菜单栏
        self.make_menu_bar()
        # 创建状态栏
        self.CreateStatusBar()      # 在框架底部创建一个状态栏。
        self.SetStatusText("状态栏")    # 设置状态栏文本并更新状态栏显示。

	def make_menu_bar(self):
        """
        菜单栏由菜单组成,菜单由 菜单项 组成。
        此方法将构建一组菜单,并绑定选择菜单项时要调用的处理函数。
        """
        # 制作菜单
        # 1、添加包含 "Hello" 和 "退出" 项目(菜单项)的 "文件" 菜单
        file_menu = wx.Menu()
        # 使用语法 "\t..." 定义一个快捷键
        hello_item = file_menu.Append(-1, "&Hello\tCtrl-H", "此菜单项在状态栏中显示的帮助信息")
        file_menu.AppendSeparator()     	# 在菜单末尾添加分隔符。
        # 可以使用 Stock ID 快速创建菜单项,并且无需指定菜单项的标签名
        # Stock ID: https://docs.wxpython.org/stock_items.html
        exit_item = file_menu.Append(wx.ID_EXIT)
        # 2、添加只有一个 "关于" 项目 的 "帮助" 菜单
        help_menu = wx.Menu()
        about_item = help_menu.Append(wx.ID_ABOUT)

        # 制作菜单栏,然后向其中添加两个菜单
        menu_bar = wx.MenuBar()
        menu_bar.Append(file_menu, "&文件")
        menu_bar.Append(help_menu, "&帮助")
        # 将菜单栏移至框架
        self.SetMenuBar(menu_bar)

        # 将每个菜单项的处理函数与 EVT_MENU 事件关联
        self.Bind(wx.EVT_MENU, self.on_hello, hello_item)
        self.Bind(wx.EVT_MENU, self.on_exit, exit_item)
        self.Bind(wx.EVT_MENU, self.on_about, about_item)

    def on_exit(self, event):
        """关闭框架,终止应用程序。"""
        self.Close(True)

    def on_hello(self, event):
        """显示Hello对话框。"""
        wx.MessageBox("Hello World!")

    def on_about(self, event):
        """显示关于对话框"""
        wx.MessageBox("这是一个wxPython的演示Demo", "关于Hello World", wx.OK | wx.ICON_INFORMATION)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

整体代码

import wx

class HelloWorld(wx.Frame):
    """
    自定义的HelloWorld框架
    """
    def __init__(self, *args, **kw):
        # 调用父类的 __init__ 方法
        super().__init__(*args, **kw)
        # 在框架中创建一个面板
        pnl = wx.Panel(self)
        # 在面板上放一个静态文本
        st = wx.StaticText(pnl, label="Hello World")   # 用于显示一行或多行只读文本,并作为一个控件返回
        font = st.GetFont()     # 获取控件字体
        font.PointSize += 10    # 字体增加10, 默认为9
        font = font.Bold()      # 设置字体为加粗
        st.SetFont(font)        # 设置控件字体,否则将不会生效
        # 创建一个调整器来管理控件的布局
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(st, wx.SizerFlags().Border(wx.TOP | wx.LEFT, 25))
        pnl.SetSizer(sizer)
        # 创建菜单栏
        self.make_menu_bar()
        # 创建状态栏
        self.CreateStatusBar()      # 在框架底部创建一个状态栏。
        self.SetStatusText("状态栏")    # 设置状态栏文本并更新状态栏显示。

    def make_menu_bar(self):
        """
        菜单栏由菜单组成,菜单由 菜单项 组成。此方法将构建一组菜单,并绑定选择菜单项时要调用的处理函数。
        """
        # 制作菜单
        # 1、使用 "Hello" 和 "退出" 项目(菜单项)创建 "文件" 菜单
        file_menu = wx.Menu()
        # 使用语法 "\t..." 定义一个快捷键
        hello_item = file_menu.Append(-1, "&Hello\tCtrl-H", "此菜单项在状态栏中显示的帮助信息")
        file_menu.AppendSeparator()     # 在菜单末尾添加分隔符。
        # 可以使用 Stock ID 快速创建菜单项,并且无需指定菜单项的标签名
        # Stock ID: https://docs.wxpython.org/stock_items.html
        exit_item = file_menu.Append(wx.ID_EXIT)
        # 2、添加只有一个 "关于" 项目的 "帮助" 菜单
        help_menu = wx.Menu()
        about_item = help_menu.Append(wx.ID_ABOUT)

        # 制作菜单栏,然后向其中添加两个菜单
        menu_bar = wx.MenuBar()
        menu_bar.Append(file_menu, "&文件")
        menu_bar.Append(help_menu, "&帮助")
        # 将菜单栏移至框架
        self.SetMenuBar(menu_bar)

        # 将每个菜单项的处理函数与 EVT_MENU 事件关联
        self.Bind(wx.EVT_MENU, self.on_hello, hello_item)
        self.Bind(wx.EVT_MENU, self.on_exit, exit_item)
        self.Bind(wx.EVT_MENU, self.on_about, about_item)

    def on_exit(self, event):
        """关闭框架,终止应用程序。"""
        self.Close(True)

    def on_hello(self, event):
        """显示Hello对话框。"""
        wx.MessageBox("Hello World!")

    def on_about(self, event):
        """显示关于对话框"""
        wx.MessageBox("这是一个wxPython的演示Demo", "关于Hello World", wx.OK | wx.ICON_INFORMATION)



if __name__ == '__main__':
    app = wx.App()
    frm = HelloWorld(None, title='Hello World')
    frm.Show()
    app.MainLoop()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

胡桃の壶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值