【问题标题】:Scrolling windows with wxPython使用 wxPython 滚动窗口
【发布时间】:2012-01-18 06:05:12
【问题描述】:

我正在制作一个带有滚动条和一些图像的框架。当框架为空时,滚动条工作正常。但是,当我添加图片时,滚动条似乎被推到了框架的左上角。如何实现我的代码,以便在我添加图片后滚动条保持原位?

工作代码;

    import wx
    import wx.animate


    class ScrollbarFrame(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, -1, 'Scrollbar Example', pos = (100, 50), size=(1000, 1000))
            self.scroll = wx.ScrolledWindow(self, -1)
            self.scroll.SetScrollbars(1, 1, 1000, 1000)
            #self.button = wx.Button(self.scroll, -1, "Scroll Me", pos=(50, 20))
            #self.Bind(wx.EVT_BUTTON,  self.OnClickTop, self.button)
            #self.button2 = wx.Button(self.scroll, -1, "Scroll Back", pos=(500, 350))
            #self.Bind(wx.EVT_BUTTON, self.OnClickBottom, self.button2)
            self.SetBackgroundColour("gray")
            imageName = "01 background.png"
            gifName = "Jill.gif"
            backgroundImage = wx.Image(imageName, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
            wx.StaticBitmap(self, -1, backgroundImage,(10,5),(backgroundImage.GetWidth(), backgroundImage.GetHeight()))
            gifImage = wx.animate.GIFAnimationCtrl(self, 0, gifName, pos=(160, 74))
            # clears the background
            gifImage.GetPlayer().UseBackgroundColour(True)
            gifImage.Play()

    def update(self, imageName, gifName):
        backgroundImage = wx.Image(imageName, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
        wx.StaticBitmap(self, -1, backgroundImage,(10,5),(backgroundImage.GetWidth(), backgroundImage.GetHeight()))
        gifImage = wx.animate.GIFAnimationCtrl(self, 0, gifName, pos=(100, 100))
        # clears the background
        gifImage.GetPlayer().UseBackgroundColour(True)
        gifImage.Play()

    def OnClickTop(self, event):
        self.scroll.Scroll(600, 400)

    def OnClickBottom(self, event):
        self.scroll.Scroll(1, 1)


app = wx.PySimpleApp()
frame = ScrollbarFrame()
frame.Show()
app.MainLoop()

如果你注释掉这部分:

 gifName = "Jill.gif"
        backgroundImage = wx.Image(imageName, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
        wx.StaticBitmap(self, -1, backgroundImage,(10,5),(backgroundImage.GetWidth(), backgroundImage.GetHeight()))
        gifImage = wx.animate.GIFAnimationCtrl(self, 0, gifName, pos=(160, 74))
        # clears the background
        gifImage.GetPlayer().UseBackgroundColour(True)
        gifImage.Play()

窗口与滚动条一起正确显示。但是包含其中一个(或两个)图像文件,就会出现问题。

【问题讨论】:

标签: python image scroll wxpython


【解决方案1】:

如果您希望您的图像在滚动窗口面板中,那么您必须将您的静态 bipmap 和 gifImage 放入其中。所以你的图片的父级不应该是selfwx.Frame 实例),而是self.scroll

修改指示的4行:

    ...................
    wx.StaticBitmap(self.scroll, -1, backgroundImage,(10,5),(backgroundImage.GetWidth(), backgroundImage.GetHeight()))    # <- this one
    gifImage = wx.animate.GIFAnimationCtrl(self.scroll, 0, gifName, pos=(160, 74))  # <- this one
    # clears the background
    gifImage.GetPlayer().UseBackgroundColour(True)
    gifImage.Play()

def update(self, imageName, gifName):
    backgroundImage = wx.Image(imageName, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
    wx.StaticBitmap(self.scroll, -1, backgroundImage,(10,5),(backgroundImage.GetWidth(), backgroundImage.GetHeight()))    # <- this one
    gifImage = wx.animate.GIFAnimationCtrl(self.scroll, 0, gifName, pos=(100, 100))  # <- this one
    ...................

这会将您的两张图片叠加在一起。如果您想将它们分开放置(列或行),那么您应该将它们添加到插入滚动窗口中的 sizer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    相关资源
    最近更新 更多