2012-10-22 22 views
1

在以下示例中,我使用恢復選項爲菜單列表編碼了一個過濾器。它被放置在面板中。菜單欄中的wx.TextCtrl字段

我的問題是是否可以在菜單欄中放置wx.TextCtrl字段?

這裏是近似碼。也許還有更好的解決方案?我希望使用戶友好和直觀的部件。

#!/usr/bin/python 
# -*- coding: utf-8 -*- 


import wx 

mlst=["LT1","LT2","LT3","RT1","RT2","RT3","LF1","LF2","LF3","RF1","RF2","RF3"] 

class MainWidget(wx.Frame): 

    def __init__(self, parent, title): 
     super(MainWidget, self).__init__(parent, title=title) 

     panel = wx.Panel(self) 
     vbox = wx.BoxSizer(wx.VERTICAL) 
     hbox=wx.BoxSizer(wx.HORIZONTAL) 
     st = wx.StaticText(panel, label='Button filter') 
     self.tc=wx.TextCtrl(panel,size=(40,-1)) 
     hbox.Add(st, flag=wx.RIGHT, border=10) 
     hbox.Add(self.tc, proportion=.1) 
     vbox.Add(hbox, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10) 
     panel.SetSizer(vbox)  

     menubar = wx.MenuBar() 
     self.mButton=wx.Menu() 
     mr=self.mButton.Append(wx.NewId(),'&Restore') 
     self.Bind(wx.EVT_MENU, self.OnRestore,mr) 

     for i,item in enumerate(mlst): 
      self.mButton.Append(wx.NewId(),item,item) 

     self.Bind(wx.EVT_TEXT, self.OnText,self.tc) 

     menubar.Append(self.mButton, '&Button') 
     self.SetMenuBar(menubar) 

     #mtitle="{} {}".format(len(mlst),self.mButton.GetLabel() ) 


    def OnRestore(self,event): 
     itemnames=[ x.GetText() for x in self.mButton.GetMenuItems() ] 
     for item in mlst: 
      if item not in itemnames: 
       self.mButton.Append(wx.NewId(),item,item) 
     self.tc.ChangeValue('') 

    def OnText(self, event): 
     text = self.tc.GetValue() 
     items=self.mButton.GetMenuItems() 

     for i,item in enumerate(items): 
      if i>0: 
       if text not in item.GetText(): 
        print 'deleting: ',item.GetText() 
        self.mButton.RemoveItem(item) 

     print [ x.GetText() for x in self.mButton.GetMenuItems() ] 


if __name__ == '__main__': 
    app = wx.App(redirect=False) 
    frame = MainWidget(None, "Menu items filter") 
    frame.Show(True) 
    app.MainLoop() 

回答

0

我不相信,因爲他們包裹機部件和我從來沒有見過,在本機的菜單前,這是可能的正常功能部件。你可能可以用FlatMenu來做,因爲它是純Python。至少,你應該能夠破解FlatMenu代碼來允許它。否則,你將需要推出自己的。

雖然你可以在工具欄(和FlatMenu工具欄實現)中放置一個TextCtrl。

+0

非常感謝。我很感謝你的回答。 Lavoslav – user1764592