【问题标题】:Why am I seeing glitches when using wx.SplitterWindow?为什么我在使用 wx.SplitterWindow 时会看到故障?
【发布时间】:2018-01-23 00:13:08
【问题描述】:

我目前在我的 wxpython 应用程序中使用wx.SpliterWindow。当我运行应用程序时,GUI 看起来很好。但是,当我尝试在拆分器窗口的各个部分之间移动分隔线时,会出现多个奇怪的水平多色故障。无论我移动分隔线,它们都会继续出现。一旦我释放分隔线,故障就会消失。 (我尝试上传此行为的图片或 GIF,但故障消失得太快而无法捕捉。如果我能够制作图片或 GIF,我会发布它。)

这是我正在运行的代码:

import wx


class Panel1(wx.Panel):
    def __init__(self, parent, *args, **kwargs):
        super().__init__(parent=parent, *args, **kwargs)
        self.SetBackgroundColour((0, 0, 255))


class Panel2(wx.Panel):
    def __init__(self, parent, *args, **kwargs):
        super().__init__(parent=parent, *args, **kwargs)
        self.SetBackgroundColour((0, 255, 0))


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

        splitter = wx.SplitterWindow(self)
        panel1 = Panel1(splitter)
        panel2 = Panel2(splitter)

        splitter.SplitHorizontally(panel1, panel2)
        splitter.SetMinimumPaneSize(20)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(splitter, 1, wx.EXPAND)
        self.SetSizer(sizer)


class App(wx.App):
    def OnInit(self):
        editor = Frame(None, title='wxPython')
        editor.Show()
        return True


if __name__ == '__main__':
    app = App(False)
    app.MainLoop()

在某些平台上使用 wx.SplitterWindow 时,这种行为是已知的错误吗?我在 wxPython's issues page 上找不到任何内容。

这是我的规格

  • Windows 10.0
  • Python 3.6.1
  • wxPython 4.0.0b2

【问题讨论】:

  • 我只能猜测可能在splitter 上调用SetDoubleBuffered(True),面板或框架本身可能会有所帮助。
  • 感谢@MichaelButscher 的提示。不幸的是,它没有用。不过,我会继续查看 wxPython 文档。也许会有什么事情发生。

标签: python python-3.x wxpython visual-glitch


【解决方案1】:

这不是错误,只需设置标志wxSP_LIVE_UPDATE。 在DOC,这个标志将

不要画异或线,而是立即调整子窗口的大小。

在python中,写这个 splitter = wx.SplitterWindow(self, style = wx.SP_LIVE_UPDATE),则正常运行。

【讨论】:

  • 感谢@obgnaw,您的效果非常好!我不是很精通 wxPython 库。我想我错过了文档的那部分。我将在 1 天的最低赏金期结束后(大约三个小时后)发放赏金。
  • anytime @ChristianDean 它来自 wxWidgets 的 DOC,也许这就是你错过它的原因。
  • 我在 C++ 应用程序中也看到了这个问题,请在此处查看我的报告:groups.google.com/d/msg/wx-users/f-KzNnrjKZ8/pxIJ8F1XAAAJ 并且还有一个屏幕截图。仅显示一行。您是否看到正确显示的 XOR 线(如您所说的故障)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多