我有一個我正在開發的wxPython應用程序。我正在研究菜單和菜單欄。使用wxPython菜單,ID:這是什麼意思,我應該用於X?
到目前爲止,這裏是我的代碼有:
class Frame(wx.Frame):
def __init__(self, title):
wx.Frame.__init__(self, None, title=title, pos=(150,150), size= (350,200))
self.Bind(wx.EVT_CLOSE, self.OnClose)
menuBar = wx.MenuBar()
menu = wx.Menu()
m_exit = menu.Append(wx.ID_EXIT, "&Exit\tAlt-X",
"Close window and exit program.")
self.Bind(wx.EVT_MENU, self.OnClose, m_exit)
menu = wx.Menu()
m_about = menu.Append(wx.ID_ABOUT, "&About", "Information about this program")
self.Bind(wx.EVT_MENU, self.OnAbout, m_about)
menuBar.Append(menu, "&Help")
self.SetMenuBar(menuBar)
self.statusbar = self.CreateStatusBar()
panel = wx.Panel(self)
box = wx.BoxSizer(wx.VERTICAL)
m_text = wx.StaticText(panel, -1, "Hello World!")
m_text.SetFont(wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD))
m_text.SetSize(m_text.GetBestSize())
box.Add(m_text, 0, wx.ALL, 10)
m_close = wx.Button(panel, wx.ID_CLOSE, "Close")
m_close.Bind(wx.EVT_BUTTON, self.OnClose)
box.Add(m_close, 0, wx.ALL, 10)
panel.SetSizer(box)
panel.Layout()
def OnClose(self, event):
dlg = wx.MessageDialog(self,
"Do you really want to close this application?",
"Confirm Exit", wx.OK|wx.CANCEL|wx.ICON_QUESTION)
result = dlg.ShowModal()
dlg.Destroy()
if result == wx.ID_OK:
self.Destroy()
def OnAbout(self, event):
dlg = AboutBox()
dlg.ShowModal()
dlg.Destroy()
我想新建,打開,保存,另存爲添加到文件菜單,添加一個操作菜單,並在其中提出措施1,措施2(臨時名稱)。我唯一的問題是這些:
首先,在聲明m_exit = menu.Append(wx.ID_EXIT, etc...
wx.ID_EXIT是什麼意思?我在哪裏可以獲得可能的ID列表?我不確定我要爲New,Open,Save,SaveAs等設置什麼。我將創建OnNew,OnOpen等功能,但我不確定該ID應該是什麼。我聽說過自定義ID,但我需要一個例子,因爲我似乎無法找到任何對我有意義的事情。我看到你在Append()中使用它們而不是Bind()。爲什麼要這樣?將它傳遞給Append()的原因究竟是什麼?就像在m_exit中一樣(見下文),我使用wx.ID_EXIT,但是在綁定中我再也沒有提到它,我只提到wx.EVT_MENU,要執行的函數和menu.Append()的名稱。這些項目如何相互作用?
編輯:
我試過這段代碼:
menu = wx.Menu()
ID_FILE_NEW = wx.NewId()
m_new = menu.Append(wx.ID_FILE_NEW, "&New\tCtrl+N", "txt")
self.Bind(wx.EVT_MENU, self.OnNew, m_new)
ID_FILE_OPEN = wx.NewId()
m_open = menu.Append(wx.ID_FILE_OPEN, "&Open\tCtrl+O", "txt")
self.Bind(wx.EVT_MENU, self.OnOpen, m_open)
ID_FILE_SAVE = wx.NewId()
m_save = menu.Append(wx.ID_FILE_SAVE, "&Save\tCtrl+S", "txt")
self.Bind(wx.EVT_MENU, self.OnSave, m_save)
ID_FILE_SAVE_AS = wx.NewId()
m_save_as = menu.Append(wx.FILE_SAVE_AS, "&SaveAs", "txt")
self.Bind(wx.EVT_MENU, self.OnSaveAs, m_save_as)
m_exit = menu.Append(wx.ID_EXIT, "&Exit\tCtrl+X",
"Close window and exit program.")
self.Bind(wx.EVT_MENU, self.OnClose, m_exit)
menuBar.Append(menu, "&File")
它沒有工作,打開應用程序,然後關閉瞬間,當我刪除一切,但m_close,它再次工作。顯然我的wx.NewId()變量不工作?我在創建自己的wx.NewId或設置菜單欄以獲得更多菜單和菜單項時做了什麼錯誤。我知道我至少在做這些事情中的一個錯誤。任何人都可以幫我弄清楚它是什麼,並提出完成目標的最佳方法?
編輯續:
我有一個從派生的wx.Dialog兩班。下面是代碼:
class AboutBox(wx.Dialog):
def __init__(self):
wx.Dialog.__init__(self, None, -1, "About",
style=wx.DEFAULT_DIALOG_STYLE|wx.THICK_FRAME|wx.RESIZE_BORDER|
wx.TAB_TRAVERSAL)
hwin = HtmlWindow(self, -1, size=(400,200))
vers = {}
vers["python"] = sys.version.split()[0]
vers["wxpy"] = wx.VERSION_STRING
hwin.SetPage(aboutText % vers)
btn = hwin.FindWindowById(wx.ID_OK)
irep = hwin.GetInternalRepresentation()
hwin.SetSize((irep.GetWidth() + 25, irep.GetHeight() + 10))
self.SetClientSize(hwin.GetSize())
self.CentreOnParent(wx.BOTH)
self.SetFocus()
class VersionBox(wx.Dialog):
def __init__(self):
wx.Dialog.__init__(self, None, -1, "Version",
style=wx.DEFAULT_DIALOG_STYLE|wx.THICK_FRAME|wx.RESIZE_BORDER|
wx.TAB_TRAVERSAL)
hwin = HtmlWindow(self, -1, size=(400, 200))
vers = {}
vers["python"] = sys.version.split()[0]
vers["wxpy"] = wx.VERSION_STRING
hwin.SetPage(versionText % vers)
btn = hwin.FindWindowById(wx.ID_OK)
irep = hwin.GetInternalRepresentation()
hwin.SetSize((irep.GetWidth() + 25, irep.GetHeight() + 10))
self.SetClientSize(hwin.GetSize())
self.CentreOnParent(wx.BOTH)
self.SetFocus()
凡CALS hwin.FindWindowById(wx.ID_OK)我不明白它是如何找到正確的窗口。例如AboutBox顯示關於窗口,但在其菜單中。添加它使用wx.ID_ABOUT,但wx.ID_OK正常工作。我現在試圖實現VersionBox。但我不知道該怎麼改變。 ID_ABOUT就像在menu.Append()中那樣?或者是其他東西。
如果不是很明顯現在我不明白這些ID的,何時使用它們,用哪些,以及他們如何與GetWindowById(),請澄清互動...
我嘗試按照我在示例和教程中看到的模式,但是當我將新的菜單項添加到菜單時,它似乎永遠不會工作。我沒有收到錯誤消息,但程序立即打開並關閉。我正在關注此代碼:http://wiki.wxpython.org/wxPython%20by%20Example但我似乎無法獲得任何菜單項,除了他們已添加的內容外。有任何想法嗎 ?
非常感謝A Million,抱歉抱着我,但我遇到了一些麻煩。即使回答我的一些問題或澄清,也可以幫助我理解wxPython的工作原理。
最後編輯:
我得到了它的版本工作,通過使用wx.ID_ABOUT像OnAbout()方法。似乎如果我添加其他OnX()方法,即使它們沒有綁定任何東西來擾亂程序,爲什麼會這樣呢?
非常感謝,您的幫助引導了我正確的方式,如果有人能夠提供一些小例子,這將有很大幫助。如果沒有,謝謝無論如何,我終於走上了正軌。
因此,如果我想編寫菜單項Open,New,Save,SaveAs和一些其他自定義操作,我如何知道使用哪個整數ID?如果沒有內置的產品滿足我的需求,我該如何定製產品?你能舉一個簡單的例子嗎? – shenk
好的,有一個簡短的例子 –
我在哪裏可以找到像ID_PRG_INFO之類的東西的定義,並且有沒有辦法制作自定義ID?我仍然無法理解身份證。如果你已經將它綁定到一個方法,你爲什麼需要這個ID?例如,我的示例代碼使用ID_ABOUT而不是ID_PRG_INFO。當它不明顯時,我怎麼知道該使用哪一個? – shenk