【问题标题】:wxPython: wx.Panel of AuiManager has empty space of graywxPython:AuiManager 的 wx.Panel 有灰色空白区域
【发布时间】:2010-12-16 16:44:06
【问题描述】:

我正在尝试制作一个带有 2 个面板的窗口。一个面板只是一个笔记本面板。第二个面板在顶部包含一个工具栏,在底部包含一个文本控件。我想使用 wx.aui.AuiManager 在我的框架中安排这个面板。

问题是我的自定义面板中有一个灰色的空白区域

这是我的代码:

import wx
import wx.aui
import images # contains toolbar icons

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                            "AUI Tutorial",
                            size=(600,400))

        self._mgr = wx.aui.AuiManager()
        self._mgr.SetManagedWindow(self)

        notebook = wx.aui.AuiNotebook(self)
        nb_panel = TabPanel(notebook)
        my_panel = MyPanel(self)
        notebook.AddPage(nb_panel, "First Tab", False)

        self._mgr.AddPane(notebook,
                          wx.aui.AuiPaneInfo().Name("notebook-content").
                          CenterPane().PaneBorder(False))
        self._mgr.AddPane(my_panel,
                          wx.aui.AuiPaneInfo().Name("txtctrl-content").
                          CenterPane().PaneBorder(False))
        self._mgr.GetPane("notebook-content").Show().Top().Layer(0).Row(0).Position(0)
        self._mgr.GetPane("txtctrl-content").Show().Bottom().Layer(1).Row(0).Position(0)

        self._mgr.Update()


class MyPanel(wx.Panel):
    """
    My panel with a toolbar and richtextctrl
    """
    def __init__(self,parent):
        wx.Panel.__init__(self,parent=parent,id=wx.ID_ANY)

        sizer = wx.BoxSizer(wx.VERTICAL)

        toolbar = wx.ToolBar(self,-1)
        toolbar.AddLabelTool(wx.ID_EXIT, '', images._rt_smiley.GetBitmap())
        self.Bind(wx.EVT_TOOL, self.OnExit, id=wx.ID_EXIT)

        toolbar.Realize()
        sizer.Add(toolbar,proportion=0,flag=wx.ALL | wx.ALIGN_TOP)

        text = ""
        txtctrl = wx.TextCtrl(self,-1, text, wx.Point(0, 0), wx.Size(150, 90),
                           wx.NO_BORDER | wx.TE_MULTILINE | wx.TE_READONLY|wx.HSCROLL)

        sizer.Add(txtctrl,proportion=0,flag=wx.EXPAND)        
        self.SetSizer(sizer)

    def OnExit(self,event):
        self.Close()


class TabPanel(wx.Panel):
    def __init__(self,parent):
        wx.Panel.__init__(self,parent=parent,id=wx.ID_ANY)

        sizer = wx.BoxSizer(wx.VERTICAL)
        txtOne = wx.TextCtrl(self, wx.ID_ANY, "")
        txtTwo = wx.TextCtrl(self, wx.ID_ANY, "")

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(txtOne, 0, wx.ALL, 5)
        sizer.Add(txtTwo, 0, wx.ALL, 5)
        self.SetSizer(sizer)


if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()

那么,我该如何修复我的代码,以免灰色块占用 MyPanel?此外,我的工具栏按钮似乎没有运行 self.OnExit()。这是为什么呢?

感谢您的帮助。

【问题讨论】:

    标签: python wxpython


    【解决方案1】:

    取出线:

    self._mgr.GetPane("notebook-content").Show().Top().Layer(0).Row(0).Position(0)
    

    至于 OnExit() 处理程序,它正在触发! 如果你想退出应用程序,用app.Exit()替换它

    【讨论】:

    • 太棒了!我在执行此操作后 1 分钟阅读了您的答案,并且有效!此外, app.Exit() 成功了。非常感谢。
    • 没问题!如果答案正确,请不要忘记接受答案。你的图像模块也是你自己的吗?
    • 图片模块来自demo目录下的wxPython DEMO。我很想为你的答案投票,但我没有足够的声望点(它说我至少需要 15 个)。 :(
    • 我认为您不需要 15 岁才能接受答案,您只需要它来投票即可。所以你仍然可以接受这个作为正确答案。还想知道图像模块,因为我的安装中似乎根本没有它!而且似乎在任何地方都找不到!
    • 是的,我点击复选标记按钮接受您的正确答案。 image.py 模块很奇怪。私信我你的邮箱,我可以发给你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2023-03-15
    • 2019-07-28
    • 2021-06-06
    相关资源
    最近更新 更多