wxPython事件用于ScrolledPanel



我想制作2个textctrl,一个是标题,一个是内容,当我垂直滚动时,只有内容被滚动,但当我水平滚动时,标题和内容都被滚动。所以我打算把它们放在一个单独的ScrolledPanel中。当我滚动内容textctrl时,wx。EVT_SCROLLWIN是触发和调用OnScroll函数。在这个函数中,我将获得内容TextCtrl的x位置,并将其设置为header TextCtrl。

然而,我有问题时,试图使用wx.EVT_SCROLLWIN。这是我的代码:

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=(200, 200))
        self.panel=panel = wx.Panel(self, -1)
        vbox = wx.BoxSizer(wx.VERTICAL)
        vboxA = wx.BoxSizer(wx.VERTICAL)
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        headerPanel = ScrolledPanel(panel, -1, size=(150,32))
        hboxHeader = wx.BoxSizer(wx.HORIZONTAL)
        self.headertc = headertc = wx.TextCtrl(headerPanel, -1, header,
                             size=(500,23),style= wx.TE_READONLY)
        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)
        textPanel = ScrolledPanel(panel, -1, size = (150,150))
        #self.Bind(wx.EVT_SCROLLWIN, self.OnScroll, id=textPanel.GetId())
        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):
        print "OnScroll"

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

如果我使用代码行38:OnScroll被调用,但内容TextCtrl没有移动。如果我使用代码行37(或不使用37或38)内容TextCtrl被移动,但OnScroll不被调用。谁能帮我找出这里出了什么问题吗?

除非在EVT_SCROLLWIN处理程序中调用event. skip(),否则默认的事件动作不会发生,如果您不想调用event. skip(),则需要自己处理滚动

相关内容

  • 没有找到相关文章