2

使用 wxPython 为 OSX 和 Linux/X 编写 GUI,我遇到了一个问题,如果我有大量的笔记本选项卡,我无法获得 wx.Dialog 或 wx.Frame 或 wx .Panel 包含 wx.Notebook 展开以显示它们(wx.EXPAND 似乎没有做任何事情)

在 Linux/X 下,这不是问题,因为它会产生小箭头,让您从一个选项卡转到另一个选项卡(参见此处的插图)。但在 OSX 下,我的用户被搞砸了,因为标签从面板边缘拉出并且完全无法访问(插图)。

用于创建上述示例的示例代码:

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 为所有笔记本标签腾出足够的空间?谢谢!

4

1 回答 1

0

进一步的研究表明,这是 OSX 中的本机小部件限制。引用 Robin Dunn 的话:

本机选项卡控件不支持它。显然,Apple 的 UI 设计师认为任何布局上的选项卡都不应该超过六个,如果需要更多页面,那么 UI 就会出现问题。

幸运的是,同样的回复指出了 Listbook(我不知道)和其他相关控件的存在。在浏览了关于这些控件的非常有用的博客条目后,我最终选择了 Choicebook,它在 OSX 上非常适合我的用途。

希望这可以帮助其他有同样问题的人!

于 2013-10-18T11:55:54.950 回答