2013-03-04 14 views
0

我對wxPython非常新,我已經使用以下教程來創建幾個TextCtrl字段和東西。 http://sebsauvage.net/python/gui/#import如何使字段在wxPython中的框架中工作

一切工作除了我不能切換字段之間使用Tab鍵非常討厭。我如何修改該教程中的示例(添加了更多的TextCtrl),以便我可以使用Tab在字段之間切換?

如果你不想看看教程,它的basicalyl框架與一堆TextCtrl放在它使用GridBagSizer。

在網上搜索時,我發現所有的東西都是「創建面板」,但我嘗試過,因爲我對wxPython非常陌生,它沒有工作,我無法找到一個徹底的教程如何做到這一點(如果可能的Id喜歡堅持只有一個框架...)

謝謝!

回答

0

這裏的東西,我之前提出的,它是不是很好,但我可以假設你可以添加到它,只要你想

import os 
import wx 

class tab(wx.Panel): 
    def __init__(self, parent, newid=0, name="New Tab", file=None, aNewTab=False): 
     wx.Panel.__init__(self, parent) 
     self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE) 
     sizer = wx.BoxSizer() 
     sizer.Add(self.control, -1, wx.EXPAND, newid) 
     self.SetSizer(sizer) 
     if file != None: 
      self.control.write(file) 
     else: 
      pass 

class MainWindow(wx.Frame): 

    def __init__(self, parent, title): 
     wx.Frame.__init__(self, parent, title=title, size=(1000,900)) 
     self.CreateStatusBar() 

     self.buttons = [] 

     filemenu = wx.Menu() 
     helpmenu = wx.Menu() 

     menuOpen = filemenu.Append(wx.ID_OPEN, "&Open", "Open a file to edit") 
     menuSave = filemenu.Append(wx.ID_SAVE, "&Save", "Save the current file") 
     menuSaveAs = filemenu.Append(wx.ID_SAVEAS, "&Save As", "Save the current file as") 
     menuExit = filemenu.Append(wx.ID_EXIT, "E&xit", "Terminate the program") 
     menuAbout = helpmenu.Append(wx.ID_ABOUT, "&About", "Information about this program,") 

     menuBar = wx.MenuBar() 
     menuBar.Append(filemenu, "&File") 
     menuBar.Append(helpmenu, "&Help") 
     self.SetMenuBar(menuBar) 

     self.openFiles = { } 


     self.p = wx.Panel(self) 
     self.nb = wx.Notebook(self.p) 
     self.newTab = tab(self.nb) 
     self.nb.AddPage(self.newTab, "New Tab") 
     self.sizer = wx.BoxSizer() 
     self.sizer.Add(self.nb, 1, wx.EXPAND) 
     self.p.SetSizer(self.sizer) 

     #new ids 
     saveid = wx.NewId() 
     openid = wx.NewId() 
     boldid = wx.NewId() 

     #Set Events 
     self.Bind(wx.EVT_MENU, self.OnAbout, menuAbout) 
     self.Bind(wx.EVT_MENU, self.OnExit, menuExit) 
     self.Bind(wx.EVT_MENU, self.OnOpen, menuOpen) 
     self.Bind(wx.EVT_MENU, self.OnSave, menuSave) 
     self.Bind(wx.EVT_MENU, self.OnSave, menuSaveAs) 
     # Events that are activated when buttons are pressed 
     self.Bind(wx.EVT_MENU, self.OnSave, id=saveid) 
     self.Bind(wx.EVT_MENU, self.OnOpen, id=openid) 
     self.Bind(wx.EVT_MENU, self.OnBold, id=boldid) 

     self.accel_tbl = wx.AcceleratorTable([(wx.ACCEL_CTRL, ord('S'), saveid), 
               (wx.ACCEL_CTRL, ord('O'), openid), 
               (wx.ACCEL_CTRL, ord('B'), boldid)]) 
     self.SetAcceleratorTable(self.accel_tbl) 

     self.Show(True) 

    def OnAbout(self,e): 
     dlg = wx.MessageDialog(self, "A simple text editor", "About Simple Editor", wx.OK) 
     dlg.ShowModal() 
     dlg.Destroy() 

    def OnExit(self,e): 
     if self.control.IsModified: 
      dlg = wx.MessageDialog(self, "If you quit now all your work will be erased. Do you still want to quit?", "Are You Sure?", wx.YES_NO | wx.ICON_QUESTION) 
      a = dlg.ShowModal() 
      if a == wx.ID_YES: 
       self.Close(True) 
      else: 
       self.OnSave(self, True) 

    def OnOpen(self,e): 
     """ 
     Open a File 
     """ 
     self.dirname = '' 
     dlg = wx.FileDialog(self, "Choose a file", self.dirname, "", "*.*", wx.FD_OPEN) 
     if dlg.ShowModal() == wx.ID_OK: 
      self.filename = dlg.GetFilename() 
      self.dirname = dlg.GetDirectory() 
      f = open(os.path.join(self.dirname, self.filename), 'r') 
     newTab = tab(self.nb, name=self.filename, file=f.read(), aNewTab=True) 
     self.nb.AddPage(newTab, "%s" %(self.filename)) 
     f.close() 
     self.SetTitle("Simple Editor - %s" %(self.filename)) 
     dlg.Destroy() 

    def OnSave(self,e, exit=False): 
     """ 
     Save a file 
     """ 
     #if self.newTab.control.IsEmpty(): 
      #dlg = wx. 
     self.dirname = '' 
     dlg = wx.FileDialog(self, "Where do you want to save this file?", self.dirname, "", "*.*", wx.FD_SAVE) 
     if dlg.ShowModal() == wx.ID_OK: 
      self.filename = dlg.GetFilename() 
      self.dirname = dlg.GetDirectory() 
      f = open(os.path.join(self.dirname, self.filename), 'w') 
      a = str(self.control.GetValue()) 
      f.write(a) 
      f.close() 
     dlg.Destroy() 
     if exit != False: 
      self.Close(True) 
     self.SetTitle("Simple Editor - %s" %(self.filename)) 

app = wx.App(False) 
frame = MainWindow(None, "Simple Editor") 
app.MainLoop() 
+1

林不知道多數民衆贊成在尋找什麼即時的(和我不能想運行的代碼)。您能否指出可以使用Tab鍵切換字段的代碼? – 2013-03-04 23:02:50

+0

看起來你誤解了OP的問題。他們詢問有關選項卡*按鈕*,而不是將標籤添加到其用戶界面。 – acattle 2013-03-05 00:26:38

+0

哎呀,對不起,你可以添加一個響應按鍵的事件,檢查按鍵,如果它的選項卡然後運行一個函數,如OnTab() – PurityLake 2013-03-05 13:32:29

1

你需要一個wx.Panel添加到幀然後將該面板對象作爲父項添加到所有其他小部件。 wx.Panel添加了Tab鍵功能,並使框架在所有平臺上正確(主要是正確的顏色)。如果你沒有面板,那麼Tab鍵將不起作用。

看到這個線程,其中羅賓鄧恩的wxPython的創造者說同一件事:https://groups.google.com/forum/?fromgroups=#!topic/wxpython-users/gF8r_HwnOEU

相關問題