2012-04-06 5 views
1

所以我有以下代碼設置爲說明問題:當這個運行的wxPython:TextCtrl沒有以往任何時候都接收焦點時在面板內部另一面板內部的框架內

import wx 


class testPanel(wx.Panel): 
    def __init__(self, parent): 
     super(testPanel, self).__init__(parent) 
     self.hsizer = wx.BoxSizer(wx.HORIZONTAL) 
     self.txt = wx.TextCtrl(self, style=wx.TE_MULTILINE) 

     self.hsizer.Add(self.txt, proportion=1, 
      flag=wx.EXPAND) 
     self.SetSizer(self.hsizer) 

     self.hsizer.Fit(self) 
     self.Show(True) 


class testFrame(wx.Frame): 
    def __init__(self, parent): 
     super(testFrame, self).__init__(parent) 
     self.mainPanel = wx.Panel(self) 
     self.vsizer = wx.BoxSizer(wx.VERTICAL) 

     self.txt1 = testPanel(self) 
     self.txt2 = testPanel(self) 

     self.vsizer.Add(self.txt1, proportion=1, 
      flag=wx.EXPAND) 
     self.vsizer.Add(self.txt2, proportion=1, 
      flag=wx.EXPAND) 
     self.mainPanel.SetSizer(self.vsizer) 

     self.vsizer.Fit(self.mainPanel) 

     self.mainSizer = wx.BoxSizer(wx.HORIZONTAL) 
     self.mainSizer.Add(self.mainPanel, proportion=1, 
      flag=wx.EXPAND) 
     self.SetSizer(self.mainSizer) 
     self.mainSizer.Fit(self) 

     self.Show(True) 

app = wx.PySimpleApp() 
frame = testFrame(None) 
frame.Show(True) 
app.MainLoop() 

,一切都顯示爲預計,但兩個wx.TextCtrls將不會獲得焦點。當多餘的面板被移除時情況並非如此,但我無法避免使用額外的面板。

回答

1

用途:

self.txt1 = testPanel(self.mainPanel) 
self.txt2 = testPanel(self.mainPanel) 

,他們將獲得焦點。

在wxPython中,當您設計具有分支但沒有交叉的直線繼承時,事情會變得更好。由於你的testPanel在屬於mainPanel的sizer中,所以父親不是Frame(self),而是mainPanel,

相關問題