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()
现在我们进入源码解读环节:

在解读代码前,先研究一张图片
WxPython -- 第四篇 -- 为窗口添加菜单栏与状态栏_第1张图片

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

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

WxPython -- 第四篇 -- 为窗口添加菜单栏与状态栏_第2张图片

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

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

WxPython -- 第四篇 -- 为窗口添加菜单栏与状态栏_第3张图片

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

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

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

菜单已经创建,让我们来验收下劳动成果吧:
WxPython -- 第四篇 -- 为窗口添加菜单栏与状态栏_第5张图片

拓展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)

完成!现在我们再次运行程序:
WxPython -- 第四篇 -- 为窗口添加菜单栏与状态栏_第6张图片

以上就是今天的内容

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



WxPython -- 第四篇 -- 为窗口添加菜单栏与状态栏_第7张图片

你可能感兴趣的:(WxPython -- 第四篇 -- 为窗口添加菜单栏与状态栏)