wx.ScrolledWindow (或 ScrolledPanel ) 中的滚动条

首先,ScrolledWindow和ScrolledPanel的关系是


object --+                        
         |                        
    Object --+                    
             |                    
    EvtHandler --+                
                 |                
            Window --+            
                     |            
                 Panel --+        
                         |        
            ScrolledWindow --+    
                             |    
              PyScrolledWindow --+
                                 |
                                ScrolledPanel


参考wxpython api (http://www.wxpython.org/docs/api/wx.ScrolledWindow-class.html)


其中有三个方法

  1. SetScrollRate(xstep, ystep)
  2. SetScrollBars(pixelsPerUnitX, pixelsPerUnitY, noUnitsX, noUnitsY, xPos=0, yPos=0, noRefresh=False)
  3. Scroll(x, y)


其中有个概念叫滚动单位:即滚动条一次移动所引起窗口中的移动距离。


先说方法2,SetScrollBars:

  1. pixelsPerUnitX和pixelsPerUnitY即滚动单位大小,接下来的两个参数noUnitsX和noUnitsY使你能够按滚动单位设置滚动区域的尺寸。
  2. 换句话说,滚动区域的象素尺寸是(pixelsPerUnitX * noUnitsX, pixelsPerUnitY * noUnitsY)。
  3. 参数xPos和yPos以滚动单位(非像素)为单位,它设置滚动条的初始位置。
  4. 如果参数noRefresh为true,那么就阻止了在因SetScrollbars()的调用而引起的滚动后的窗口的自动刷新。

再说方法1,SetScrollRate:

  • xstep和ystep其实就是SetScrollBars中的pixelsPerUnitX和pixelsPerUnitY。
  • 这两个方法的区别在于:
    • SetScrollRate要和另外一个方法SetVirtualSize(size)(它是Window类中的方法,因为继承关系所以也可以调用)一起使用,size = (pixelsPerUnitX * noUnitsX, pixelsPerUnitY * noUnitsY)


最后说方法3,Scroll:

  • Scroll(x, y)函数很容易理解,就是将窗口滚动到某个位置,但是要注意的是,x, y参数是滚动单位。


为什么要强调这个,因为当我在动态添加组件,需要将按钮位置固定在屏幕上时,需要调用Scroll来处理。


代码如下:

panel.SetScrollbars(0, 20, 0, 20)
sizer.Layout() # 动态插入组件后要调用Layout来重新布局
y = self.btn.GetPosition()[1] # 获取按钮位置
panel.Scroll(0, (y - self.size[1] / 2) / 20) # self.size为窗口大小


最后 (y - self.size[1] / 2 ) / 20 里面的20就是pixelsPerUnitY,这样才能定位到正确的位置
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值