菜单工具栏wxPython菜单与工具栏基础示例
這兩天一直在學(xué)習(xí)菜單工具欄之類的問題,上午正好有機(jī)會(huì)和大家討論一下.
????
????
1.基本的api介紹
Package wx :: Class Menu Type Menu Method Summary Menu __init__(self, title, style) __repr__(self) MenuItem Append(self, id, text, help, kind) MenuItem AppendCheckItem(self, id, text, help) MenuItem AppendItem(self, item) MenuItem AppendMenu(self, id, text, submenu, help) Package wx :: Class MenuBar Type MenuBar Window __init__(self, parent, id, pos, size, style, name) Construct and show a generic Window. __repr__(self) bool Append(self, menu, title) Attach(self, frame) Check(self, id, check) Detach(self) bool Enable(self, enable) Enable or disable the window for user input. EnableTop(self, pos, enable) Package wx :: Class EvtHandler Type EvtHandler EvtHandler __init__(self) __repr__(self) AddPendingEvent(self, event) Bind(self, event, handler, source, id, id2)????
2.簡(jiǎn)單菜單
????在我們的第一個(gè)例子中,我們將創(chuàng)立一個(gè)menubar,一個(gè)文件菜單。菜單將只有一個(gè)菜單項(xiàng)。通過選擇項(xiàng)應(yīng)用程序退出。
????示例代碼如下:
import wx class Example(wx.Frame):def __init__(self,*args,**kw):wx.Frame.__init__(self,None)def InitUI(self):menuBar = wx.MenuBar()filemenu = wx.Menu()fitem = filemenu.Append(001,"exit","Quit Applications")fitem1 = filemenu.Append(002,"002","Quit Applications")menuBar.Append(filemenu,"&File")self.SetMenuBar(menuBar)self.Bind(wx.EVT_MENU, self.OnQuit, fitem)self.SetSize((400,250))self.SetTitle("SimpleMenu")self.Center()self.Show()def OnQuit(self,e):self.Close()def main():app = wx.App()exa = Example(None)exa.InitUI()app.MainLoop() if __name__ == '__main__':main()????這是一個(gè)以最小的菜單功能小例子。
menubar = wx.MenuBar()首先我們創(chuàng)立一個(gè)menubar對(duì)象。
fileMenu = wx.Menu()接下來,我們創(chuàng)立一個(gè)菜單對(duì)象。
fitem = fileMenu.Append(wx.ID_EXIT, 'Quit', 'Quit application')
我們追加到菜單項(xiàng)的菜單對(duì)象。第一個(gè)參數(shù)是菜單項(xiàng)的ID。標(biāo)準(zhǔn)ID會(huì)自動(dòng)添加一個(gè)圖標(biāo)和快捷(在windows上沒有出現(xiàn)圖標(biāo),也不能用快捷鍵)。 CTRL + Q在我們的例子。第二個(gè)參數(shù)是菜單項(xiàng)的名稱。最后一個(gè)參數(shù)定義狀態(tài)欄上顯示的菜單項(xiàng)被選中時(shí),簡(jiǎn)短的幫助字符串。在這里,我們沒有創(chuàng)造出wx.MenuItem明確。它是幕后的append()方法創(chuàng)立。該方法返回創(chuàng)立的菜單項(xiàng)。此參考將使用后綁定事件。
self.Bind(wx.EVT_MENU, self.OnQuit, fitem)
我們綁定菜單項(xiàng)wx.EVT_MENU的的的定制OnQuit()方法。這類方法將關(guān)閉應(yīng)用程序。
menubar.Append(fileMenu, '&File')
self.SetMenuBar(menubar)
之后,我們追加到菜單欄菜單。 &字符創(chuàng)立一個(gè)快捷鍵。后面的字符下劃線。這類方法是通過按Alt + F快捷拜訪菜單(windows上似乎不能用)。最后,我們吶喊的SetMenuBar()方法。這類方法屬于wx.Frame的部件。它設(shè)置的菜單欄。
????運(yùn)行示例圖
????
????
????
3.快捷鍵與圖標(biāo)
????在這個(gè)例子中,會(huì)手動(dòng)的創(chuàng)立一個(gè)快捷鍵與圖標(biāo),如下圖所示:
????
????示例代碼如下:
import wxAPP_EXIT = 1class Example(wx.Frame):def __init__(self,*args,**kw):wx.Frame.__init__(self,None)def InitUI(self):menuBar = wx.MenuBar()filemenu = wx.Menu()qmi = wx.MenuItem(filemenu,APP_EXIT,"&Quit\tCtrl+Q")bitm = wx.Bitmap("my.png")bitm.SetSize(size=(20,20))qmi.SetBitmap(bitm)filemenu.AppendItem(qmi)self.Bind(wx.EVT_MENU, self.OnQuit, id=APP_EXIT)menuBar.Append(filemenu, '&File')self.SetMenuBar(menuBar)self.SetSize((250, 200))self.SetTitle('Icons and shortcuts')self.Centre()self.Show(True)def OnQuit(self, e):self.Close()def main():app = wx.App()exa = Example(None)exa.InitUI()app.MainLoop() if __name__ == '__main__':main()????
4.子菜單和離開符
????每個(gè)菜單,也可以有一個(gè)子菜單。這樣我們就可以把成組類似的命令。例如,我們可以將像個(gè)人欄,地址欄,狀態(tài)欄或?qū)Ш綑?#xff0c;將工具欄子菜單隱藏/顯示各種工具欄的命令。在菜單中,我們可以逗號(hào)離開一個(gè)離開的命令。這是一個(gè)簡(jiǎn)單的線條。常見的做法是單獨(dú)的命令,如新建,打開,保存,如打印,打印預(yù)覽命令與一個(gè)單一的分離。在我們的例子中,我們將看到,我們?nèi)绾慰梢詣?chuàng)立子菜單和菜單離開
????示例圖如下:
????
????示例代碼:
import wx class Example(wx.Frame):def __init__(self,*args,**kw):wx.Frame.__init__(self,None)def InitUI(self):menuBar = wx.MenuBar()fileMenu = wx.Menu()fileMenu.Append(wx.ID_NEW,"&New")fileMenu.Append(wx.ID_OPEN, '&Open')fileMenu.Append(wx.ID_SAVE, '&Save')fileMenu.AppendSeparator()imp = wx.Menu()imp.Append(wx.ID_ANY, 'Import newsfeed list...')imp.Append(wx.ID_ANY, 'Import bookmarks...')imp.Append(wx.ID_ANY, 'Import mail...')qmi = wx.MenuItem(fileMenu, wx.ID_EXIT, '&Quit\tCtrl+W')fileMenu.AppendMenu(wx.ID_ANY, 'I&mport', imp) fileMenu.AppendItem(qmi)menuBar.Append(fileMenu, '&File')self.SetMenuBar(menuBar)self.Bind(wx.EVT_MENU, self.OnQuit, qmi)self.SetSize((400,250))self.SetTitle("SimpleMenu")#self.Centre()self.Center()self.Show()def OnQuit(self,e):self.Close()def main():app = wx.App()ex = Example(None)ex.InitUI()app.MainLoop() if __name__ == '__main__':main() 每日一道理那蝴蝶花依然花開花落,而我心中的蝴蝶早已化作雄鷹飛向了廣闊的藍(lán)天。
????
5.復(fù)選菜單Check menu item
????There are tree kinds of menu items. 它們有三種
normal item
check item
radio item
????在接下來的例子中,我們將演示如何檢查菜單項(xiàng)。一個(gè)檢查菜單項(xiàng)是視覺上表現(xiàn)為一個(gè)滴答在菜單。
????效果圖示:
????
????示例代碼:
import wxclass Example(wx.Frame):def __init__(self,*args,**kw):wx.Frame.__init__(self,None);def InitUI(self):menuBar = wx.MenuBar()filemenu = wx.Menu()viewmenu = wx.Menu()self.shst = viewmenu.Append(wx.ID_ANY,"ShowStatubar","ShowStatubar",kind=wx.ITEM_CHECK)self.shtl = viewmenu.Append(wx.ID_ANY,"ShowToolBar","ShowToolBar",kind=wx.ITEM_CHECK)viewmenu.Check(self.shst.GetId(),True)viewmenu.Check(self.shtl.GetId(),True)self.Bind(wx.EVT_MENU, self.ToggleStatuBar, self.shst)self.Bind(wx.EVT_MENU, self.ToggleToolBar, self.shtl)menuBar.Append(filemenu, '&File')menuBar.Append(viewmenu, '&View')self.SetMenuBar(menuBar)self.toolbar = self.CreateToolBar()bitm = wx.Bitmap("my.png")bitm.SetSize(size=(20,20))self.toolbar.AddLabelTool(1,'',bitm)self.toolbar.Realize()self.statusbar = self.CreateStatusBar()self.statusbar.SetStatusText('Ready')self.SetSize((350, 250))self.SetTitle('Check menu item')self.Centre()self.Show(True)def ToggleStatuBar(self,e):if self.shst.IsChecked():self.statusbar.Show()else:self.statusbar.Hide()def ToggleToolBar(self, e):if self.shtl.IsChecked():self.toolbar.Show()else:self.toolbar.Hide() def main():app = wx.App()exa = Example(None)exa.InitUI()app.MainLoop() if __name__ == '__main__':main()????
6.右鍵菜單Context menu
????上下文菜單在某些情況下出現(xiàn)的命令的列表。例如,在Firefox網(wǎng)頁瀏覽器,當(dāng)我們?cè)诰W(wǎng)頁上右擊,我們失掉一個(gè)上下文菜單。在這里,我們可以從新載入頁面,回去或查看頁面的源代碼。如果我們右鍵單擊工具欄上,我們失掉另一個(gè)管理工具欄的上下文菜單。偶然也被稱為上下文菜單彈出菜單。
????運(yùn)行效果圖:
????
????示例代碼:
import wx class MyPopupMenu(wx.Menu):def __init__(self,parent):super(MyPopupMenu,self).__init__()self.parent = parentmmi = wx.MenuItem(self,wx.NewId(),'MiniSize')self.AppendItem(mmi)self.Bind(wx.EVT_MENU, self.OnMinimize, mmi)cmi = wx.MenuItem(self,wx.NewId(),'Close')self.AppendItem(cmi)self.Bind(wx.EVT_MENU, self.OnClose, cmi)def OnMinimize(self,e):self.parent.Iconize()def OnClose(self,e):self.parent.Close()class Example(wx.Frame):def __init__(self,*args,**kw):wx.Frame.__init__(self,None);def InitUI(self):self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)self.SetSize((250, 200))self.SetTitle('Context menu')self.Centre()self.Show(True)def OnRightDown(self,e):self.PopupMenu(MyPopupMenu(self),e.GetPosition())def main():app = wx.App()exa = Example(None)exa.InitUI()app.MainLoop() if __name__ == '__main__':main()????
????參考:
wxPython中文教程 簡(jiǎn)單入門加實(shí)例????wxPython菜單與工具欄
????如何從新設(shè)置Bitmap的巨細(xì)?http://social.msdn.microsoft.com/Forums/pt-BR/ce4e0b9e-549f-4fb7-a107-a1c3a37839dc/bitmap
????
????
文章結(jié)束給大家分享下程序員的一些笑話語錄: 一條狗在街上閑逛,看見櫥窗里一張告示:「招聘程序員。會(huì)編程,有團(tuán)隊(duì)精神,至少精通兩種語言。均等機(jī)會(huì)。」
那條狗就進(jìn)去申請(qǐng),但是被拒絕了。
「我不能雇一條狗在公司里做事。」經(jīng)理說。
狗不服氣,指著告示上「均等機(jī)會(huì)」幾字抗議。
經(jīng)理沒法,嘆了口氣,不屑地問道:「你會(huì)編程嗎?」
那條狗默默地走到電腦前,編了個(gè)程序,運(yùn)作準(zhǔn)確。
「你有團(tuán)隊(duì)精神嗎?」經(jīng)理問。
那條狗掉頭看了看門外,一大群野狗在外面虎視耽耽。
「我真的不能雇狗做這份工作。」經(jīng)理氣急敗壞地說。
「就算會(huì)編程、有團(tuán)隊(duì)精神,但是我需要的雇員至少要能精通兩種語言。」
那條狗抬頭看著經(jīng)理說:「喵-噢。」
--------------------------------- 原創(chuàng)文章 By
菜單和工具欄
---------------------------------
轉(zhuǎn)載于:https://www.cnblogs.com/jiangu66/p/3153273.html
總結(jié)
以上是生活随笔為你收集整理的菜单工具栏wxPython菜单与工具栏基础示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 空间两点间距离计算
- 下一篇: 【Android LibGDX游戏引擎开