Python:确定ScrolledPanel中正在移动的滚动条

时间:2013-05-01 20:38:54

标签: event-handling wxpython controls scrollbar orientation

此问题在链接上继续提问:wxPython Event for ScrolledPanel。我编辑了一些代码,以便OnScroll函数获取内容滚动条的x位置,并使用它来设置标题滚动条的x位置。

我的问题是我无法确定何时滚动水平滚动条。因此,当滚动任何内容的滚动条时,我的程序现在已经滚动了标题的水平滚动条,而我希望在滚动内容的h滚动条时滚动标题的h滚动条。 (或者,如果任何人只能在滚动水平条时建议触发事件,那将非常好)。谢谢。

import wx
from wx.lib.scrolledpanel import ScrolledPanel
header = """
col1        col2        col3        col4        col5"""
text =   """
1336        733         1336        4732        1217

5968        4477        1217        5748        4477

1217        5635        4372        1217        5634

4369        1217        5633        4371        217"""

class Test(wx.Frame):    
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title, size=(300, 200))
        self.panel=panel = wx.Panel(self, -1)
        vbox = wx.BoxSizer(wx.VERTICAL)
        vboxA = wx.BoxSizer(wx.VERTICAL)

        hbox = wx.BoxSizer(wx.HORIZONTAL)
        self.headerPanel = headerPanel = ScrolledPanel(panel, -1, size=(150,32))
        hboxHeader = wx.BoxSizer(wx.HORIZONTAL)
        self.headertc = headertc = wx.TextCtrl(headerPanel, -1, header,
                             size=(500,32),style= wx.TE_READONLY)
        headertc.Unbind(wx.EVT_SCROLLWIN)

        hboxHeader.Add(headertc,1)
        headerPanel.SetSizer(hboxHeader)
        headerPanel.SetAutoLayout(1)
        headerPanel.SetupScrolling(scroll_y = False)
        hbox.Add(headerPanel,1, wx.EXPAND |  wx.ALL,0)

        vboxA.Add(hbox, 0, wx.EXPAND)

        self.textPanel = textPanel = ScrolledPanel(panel, -1, size = (150,150))
        textPanel.Bind(wx.EVT_SCROLLWIN, self.OnScroll)

        hboxText = wx.BoxSizer(wx.HORIZONTAL)

        self.tc = tc = wx.TextCtrl(textPanel, -1, text, size=(500,500),
                style=wx.TE_MULTILINE|wx.TE_DONTWRAP| wx.TE_READONLY)
        hboxText.Add(tc, 1)
        textPanel.SetSizer(hboxText)
        textPanel.SetAutoLayout(1)
        textPanel.SetupScrolling(scroll_x=True, scroll_y=True)

        vboxA.Add(textPanel,1, wx.EXPAND | wx.ALL,0)

        vbox.Add(vboxA, 1, wx.EXPAND | wx.ALL)
        panel.SetSizer(vbox)
        self.Centre()
        self.Show(True)  


    def OnScroll(self, event):
        event.Skip()
        x= event.GetPosition()
        self.headerPanel.Scroll(x,0)
        print event.GetEventType()



if __name__ == "__main__":
    app = wx.App()
    frame = wx.Frame(None, -1)
    win = Test(frame, "Test scroll bar")
    app.MainLoop()         

1 个答案:

答案 0 :(得分:1)

使用以下条件检查滚动处理程序中的水平滚动。

if event.Orientation == wx.SB_HORIZONTAL: