wxPython折叠窗格奇怪的剪辑问题

2024-04-25 08:08:02 发布

您现在位置:Python中文网/ 问答频道 /正文

这是allocating more size in sizer to wx.CollapsiblePane when expanded的后续内容。在

EDIT:这个问题的答案解决了我最初的问题,即当我展开或折叠窗格时,没有任何东西移动,但是现在我遇到了另一个bug。当物体移动正常时,按钮似乎互相涂抹,如下图所示。鼠标移到一个按钮上似乎会迫使它在混乱的其他部分重新绘制,但它会在后面和周围留下一堆随机的按钮碎片。在

我已经尽了最大努力在一个示例应用程序中复制这个bug,但是我做不到。我只是在这里寻找线索。有人知道是什么导致了下面所示的问题吗?只有在展开和折叠一些上部窗格之后才会发生。在

值得一提的是,下面的代码是为一个看起来非常相似的示例应用程序编写的,但由于某些原因并没有导致相同的问题。编辑也为了它的价值,这里有一个链接到我的项目的GUI的完整源代码,它生成了下面的屏幕截图。http://code.google.com/p/dicom-sr-qi/source/browse/gui/main.py?r=8a876f7b4a034df9747a2c1f2791258f671e44b1

Clipping issues occurs when expanding and collapsing one of the upper panes

import wx

class SampleSubPanel(wx.Panel):
    def __init__(self, *args, **kwargs):
        wx.Panel.__init__(self, *args, **kwargs)
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(wx.StaticText(self, 1, "A label"))
        sizer.Add(wx.SpinCtrl(self))
        self.SetSizer(sizer)

class SampleCollapsiblePane(wx.CollapsiblePane):
    def __init__(self, *args, **kwargs):
        wx.CollapsiblePane.__init__(self,*args,**kwargs)
        sizer = wx.BoxSizer(wx.VERTICAL)
        for x in range(2):
            sizer.Add(wx.CheckBox(self.GetPane(), label = str(x)))
            sizer.Add(SampleSubPanel(self.GetPane()))
        self.GetPane().SetSizer(sizer)
        self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.on_change)

    def on_change(self, event):
        self.GetParent().Layout()

class SampleSubPanel2(wx.Panel):

    def __init__(self, *args, **kwargs):
        wx.Panel.__init__(self, *args, **kwargs)
        sizer = wx.BoxSizer(wx.VERTICAL)
        for x in range(2):
            sizer.Add(SampleCollapsiblePane(self, label = str(x)), 0)
        self.SetSizer(sizer)


class Main_Frame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
        self.main_panel = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(wx.Panel(self.main_panel, style=wx.RAISED_BORDER),1, wx.EXPAND)
        sizer.Add(SampleSubPanel2(self.main_panel, style = wx.RAISED_BORDER),2, wx.EXPAND )
        sizer.Add(wx.Button(self.main_panel,label= "a button"),0,wx.ALIGN_CENTER)
        self.main_panel.SetSizer(sizer)


class SampleApp(wx.App):
    def OnInit(self):
        frame = Main_Frame(None, title = "Sample App")
        frame.Show(True)
        frame.Centre()
        return True

def main():
    app = SampleApp(0)
    app.MainLoop()

if __name__ == "__main__":
    main()

Tags: selfaddinitmaindefargslabelkwargs
1条回答
网友
1楼 · 发布于 2024-04-25 08:08:02

如果我说得对,您希望这里的代码-allocating more size in sizer to wx.CollapsiblePane when expanded正常工作。它不起作用的原因是您忘记绑定wx.EVT_COLLAPSIBLEPANE_CHANGED。这是一个对我有用的密码-

import wx

class SampleCollapsiblePane(wx.CollapsiblePane):
    def __init__(self, *args, **kwargs):
        wx.CollapsiblePane.__init__(self,*args,**kwargs)
        sizer = wx.BoxSizer(wx.VERTICAL)

        for x in range(5):
            sizer.Add(wx.Button(self.GetPane(), label = str(x)))

        self.GetPane().SetSizer(sizer)
        self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.on_change)

    def on_change(self, event):
        self.GetParent().Layout()

class Main_Frame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.main_panel = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)

        for x in range(5):
            sizer.Add(SampleCollapsiblePane(self.main_panel, label = str(x)), 0)

        self.main_panel.SetSizer(sizer)


class SampleApp(wx.App):
    def OnInit(self):
        frame = Main_Frame(None, title = "Sample App")
        frame.Show(True)
        frame.Centre()
        return True

def main():
    app = SampleApp(0)
    app.MainLoop()

if __name__ == "__main__":
    main()

编辑:看起来可能是运行在windows上的wxPython中的一个bug。下面的屏幕截图和在Ubuntu上运行的Windows上出现问题的代码完全相同。 enter image description here

相关问题 更多 >