WxPython -- 第四篇 -- 为窗口添加菜单栏与状态栏

第三篇文章中,们使用wx.TextCtrl()添加了一个文本输入控件。
但只有一个文本输入框的程序是简陋和不完整,现在!是时候开始拓展我们的程序。

拓展1:添加菜单栏

输入框有了,现在让我们来添加一个菜单,用于添加一个保存功能。

import wx

class MainWindow(wx.Frame):
    def __init__(self, parent, title, size=(400,200)):
        wx.Frame.__init__(self, parent=parent, title=title, size=size)
        self.textControl = wx.TextCtrl(self, style=wx.TE_MULTILINE)

        # 这是新内容
        # 新内容添加了菜单栏
        file_menu = wx.Menu()
        file_menu.Append(wx.ID_SAVE, '保存', '将会保存输入框中的内容')
        window_menu = wx.MenuBar()
        window_menu.Append(file_menu, '文件')
        self.SetMenuBar(window_menu)

        self.Show(True)

app = wx.App()
window = MainWindow(None, '文本编辑器')
app.MainLoop()
现在我们进入源码解读环节:

在解读代码前,先研究一张图片

代码看不懂,图片也看不懂,没什么关系,我们先来解读代码中的新内容(也就是添加菜单栏的代码)。

file_menu = wx.Menu()
解读:WxPython 中使用wx.Menu()类来表示一个菜单。不知道菜单什么?看下图

file_menu.Append(wx.ID_SAVE, '保存', '将会保存输入框中的内容')
解读:此方法用于向菜单中添加一个选项
参数(wx.ID_SAVE):这是wxWidgets提供的标准事件ID,我们实现的是保存功能,所以使用了ID_SAVE,如果你需要了解更多的标准ID,请访问 事件ID列表
参数(保存):显示到选项上的文本
最后一个参数:当鼠标选择此选项时显示到窗口状态栏中的文本(状态栏待会会讲到,很简单的一个东西)
小提示:调用一次 Append() 添加一个菜单选项,调用多次可添加多个菜单选项

window_menu = wx.MenuBar()
解读:Wxpython中使用wx.MenuBar()类来表示一个菜单栏(注意不是菜单哦),不知道菜单栏是什么?看下图

window_menu.Append(file_menu, '文件')
解读:此方法把菜单添加到菜单栏中
参数(file_menu):使用wx.Menu()创建的菜单
参数(文件):可以理解为菜单的名字,会显示到菜单栏中。
小提示:调用一次 Append() 把一个菜单添加到菜单栏,调用多次可添加多个菜单

self.SetMenuBar(window_menu)
解读:把创建好的菜单栏添加到窗口上(如果你忘了这一步,你的菜单栏将不会显示到窗口,所以要此步骤要牢记)
参数(window_menu):使用wx.MenuBar()创建的菜单栏

OK! 现在我们再回顾下开始时给出的关系图,相信你已经可以理解WxPython中菜单的创建方式了:
  1. 菜单被菜单栏包裹:wx.Menu() -> wx.MenuBar()
  2. 菜单栏被窗口包裹:wx.MenuBar() -> MainWindow()

菜单已经创建,让我们来验收下劳动成果吧:

拓展2:添加窗口状态栏

还记得我说的 file_menu.Append(wx.ID_SAVE, '保存', '将会保存输入框中的内容')这个方法的第三个参数将会显示到窗口状态栏中吗?,现在我们来实验下。

创建窗口状态栏使用 CreateStatusBar() 方法

在菜单代码后面继续编写(在菜单代码前编写也是可以的,但有一个原则,不要在self.Show()后编写任何窗口代码,因为Show()方法后的代码不会奏效)

# 这是新内容
# 新内容添加了状态栏
file_menu = wx.Menu()
file_menu.Append(wx.ID_SAVE, '保存', '将会保存输入框中的内容')
window_menu = wx.MenuBar()
window_menu.Append(file_menu, '文件')
self.SetMenuBar(window_menu)

# 创建状态栏
self.CreateStatusBar()

self.Show(True)

完成!现在我们再次运行程序:

以上就是今天的内容

下一篇 在点击保存后如何保存我们文本框中的内容(也就是事件处理)



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,018评论 3 119
  • 武松打虎。 主角:武松。 配角:酒家、母老虎、猎户等。 看点:武艺高强。 源自《水浒传》第二十二回:横海郡柴进留宾...
    纹坛怪胎阅读 2,641评论 4 3
  • 白白,这并不是告白,而是一切友谊的终结与开始。 我知道你的小名叫“白”,而这个白的含义是猫的意思。所以从那一刻开始...
    墨鲸阅读 243评论 0 0
  • 为什么要努力? 努力是为了让自己可以追随内心,去选择想要的生活。 什么是财务自由? 财务自由是可以不受金钱约束去做...
    时间鉴史阅读 537评论 0 0
  • 三者是一回事吗?
    whalecao阅读 556评论 0 0