2013-10-11 21 views
2

使用wxPython爲OSX和Linux/X編寫GUI,我遇到了一個問題,如果我有大量的筆記本選項卡,我無法得到包含wx.Notebook的wx.Dialog或wx.Frame或wx.Panel以展開全部內容(wx.EXPAND不會顯示任何內容)wxpython OSX:無法訪問大量的wx.Notebook標籤

在Linux/X下,此isn這不是一個問題,因爲它會產生小箭頭,讓您從標籤頁到標籤頁(see illustration here)。但是在OSX下,我的用戶被搞砸了,因爲這些標籤從面板的邊緣被拉出,並且完全無法訪問(illustration)。用於創建上面的例子

示例代碼:

import wx 

class TempFrame(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Temp Frame") 

     self.notebook = wx.Notebook(self, id=wx.ID_ANY, style=wx.BK_DEFAULT) 
     for num in range(0, 11): 
      notepanel = TempPanel(self.notebook, num) 
      self.notebook.AddPage(notepanel, str(num)) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(self.notebook, 0, wx.ALL | wx.EXPAND, 5) 
     self.SetSizer(sizer) 
     self.Fit() 

class TempPanel(wx.Panel): 
    def __init__(self, parent, num): 
     wx.Panel.__init__(self, parent, wx.ID_ANY) 

     self.title = wx.StaticText(self, wx.ID_ANY, str(num)) 

     self.test_list = ["One", "One", "Two", "Three", "Five", "Eight"] 
     self.test_choice = wx.Choice(self, wx.ID_ANY, choices=self.test_list) 

     sizer = wx.BoxSizer(wx.HORIZONTAL) 
     sizer.Add(self.title, 0, wx.ALL | wx.EXPAND, 5) 
     sizer.Add(self.test_choice, 0, wx.ALL | wx.EXPAND, 5) 
     self.SetSizer(sizer) 

if __name__ == '__main__': 
    app = wx.PySimpleApp() 
    frame = TempFrame() 
    frame.Show(True) 
    app.MainLoop() 

有沒有辦法告訴wxPython的,使有足夠的空間用於所有筆記本選項卡的? 謝謝!

+0

您是否嘗試過在將面板添加到sizer時手動設置比例標誌? – darmat

+0

@MatteoD這樣做,並沒有效果。 –

+0

wxPython演示在調整大小時的行爲方式是否相同?在Windows中,當我調整它太小時,箭頭就出現了,我可以用這種方式找到它們。你還使用哪個wxPython版本? –

回答

0

進一步的研究顯示,這是OSX中的本地控件限制。至quote Robin Dunn

原生選項卡控件不支持它。顯然,蘋果的設計師們認爲在任何佈局上都不應該有超過一半的選項卡,並且如果需要更多頁面,那麼 就會出現UI錯誤。

幸運的是,同樣的回覆記錄了Listbook(我不知道)的存在以及其他相關控件的作用。在經過a very helpful blog entry on those controls之後,我結束了與Choicebook的合作,這對我在OSX上的目的來說工作得很好。

希望這可以幫助其他人解決同樣的問題!