如何将wx.ScrolledWindow放入wx.SplitterWindow中?

0 投票
1 回答
1275 浏览
提问于 2025-04-16 05:00

我没想到这会这么棘手。我想要实现的效果是这样的:

X | X

这里的两个X都是可以滚动的窗口,里面会有很多文字,而'|'是一个“分隔线”,把这两个窗口分开。我想要的效果就像大多数视觉比较工具给出的那样。不过,我现在遇到的问题是,我违反了一些约束条件。当我直接用Python运行时,实际上画出来的效果差不多,虽然有些地方的大小不太合适,但还是能看到我想要的效果。不过,我的项目使用了pybliographer,这个在遇到约束条件违规时会直接退出。我是不是做错了什么?有没有更简单的方法来实现这个?

我修改了一下分隔窗口的示例代码,使用了可滚动的窗口。我先把面板放进可滚动的窗口里,然后再用这个来设置滚动条,就像wxpython wiki里的第二个示例(http://wiki.wxpython.org/ScrolledWindows,抱歉新用户不能发两个链接)。

import wx

class Splitterwindow(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(350, 300))
        quote = '''Whether you think that you can, or that you can't, you are usually right'''
        splitter = wx.SplitterWindow(self, -1)
        scroll1 = wx.ScrolledWindow(splitter,-1)
        panel1 = wx.Panel(scroll1, -1)
        wx.StaticText(panel1, -1, quote, (100, 100), style=wx.ALIGN_CENTRE)
        panel1.SetBackgroundColour(wx.LIGHT_GREY)
        panel1.SetAutoLayout(True)
        panel1.Layout()
        panel1.Fit()
        scroll_unit = 50
        width,height = panel1.GetSizeTuple()
        scroll1.SetScrollbars(scroll_unit,scroll_unit,width/scroll_unit,height/scroll_unit)
        scroll2 = wx.ScrolledWindow(splitter,-1)
        panel2 = wx.Panel(scroll2, -1)
        wx.StaticText(panel2, -1, quote, (100, 100), style=wx.ALIGN_CENTRE)
        panel2.SetBackgroundColour(wx.WHITE)
        panel2.SetAutoLayout(True)
        panel2.Layout()
        panel2.Fit()
        scroll_unit = 50
        width,height = panel2.GetSizeTuple()
        scroll2.SetScrollbars(scroll_unit,scroll_unit,width/scroll_unit,height/scroll_unit)
        splitter.SplitVertically(scroll1, scroll2)
        self.Centre()
        self.Show(True)

app = wx.App()
tmp = Splitterwindow(None, -1, 'splitterwindow.py')
app.MainLoop()

1 个回答

0

这个例子有什么问题吗?对我来说,它的表现是正常的。

撰写回答