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()
把一个菜单添加到菜单栏,调用多次可添加多个菜单
OK! 现在我们再回顾下开始时给出的关系图,相信你已经可以理解WxPython中菜单的创建方式了:self.SetMenuBar(window_menu)
解读:把创建好的菜单栏添加到窗口上(如果你忘了这一步,你的菜单栏将不会显示到窗口,所以要此步骤要牢记)
参数(window_menu):使用wx.MenuBar()
创建的菜单栏
- 菜单被菜单栏包裹:wx.Menu() -> wx.MenuBar()
- 菜单栏被窗口包裹:wx.MenuBar() -> MainWindow()
![](https://img.haomeiwen.com/i13156527/7f32afc7b465c5ab.gif)
拓展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)
完成!现在我们再次运行程序:
![](https://img.haomeiwen.com/i13156527/0332bce7db46c38e.gif)
以上就是今天的内容
下一篇 在点击保存后如何保存我们文本框中的内容(也就是事件处理)
![](https://img.haomeiwen.com/i13156527/671fb3ca2dfccdfe.jpg)