隐藏wx.lib.agw.customtreectrl.CustomTreeCtrl滚动条
来源:互联网 发布:迈卡威体测数据 编辑:程序博客网 时间:2024/05/29 08:36
版权所有,转载请注明出处:http://guangboo.org/2013/02/06/wx-lib-agw-customtreectrl-customtreectrl-hide-scrollbar
wx.lib.agw.customtreectrl.CustomTreeCtrl虽然是由ScrolledWindow继承而来,但是构造参数style却不起作用,即使设置参数style = wx.VSCROLL即只显示右边滚动条,实际运行起来两个滚动条依然会显示。本土使用windows api来处理隐藏滚动条的问题。
wxPython缺陷
wxPython为使用Python开发语言的开发者提供了一套跨平台的GUI库,它是wxWidgets的一个Python封装,并且也有很多工具用于wxPython可视化的UI设计。然而在我使用它的这段时间,发现该GUI库还存在一些缺陷,如控件都不支持透明背景,控件的背景色都是继承父控件的背景色,并且Panel,window类等还没有背景图片的接口,这就给对UI设计要求较高的应用带来了不便。虽然网络上也有很多网友提供了很多解决方法,如重新绘制控件,使支持背景透明,使Panel支持背景图片。
除了wxPython控件的一些功能欠缺外,还有些agw控件还存在一些问题,如本文要说的wx.lib.agw.customtreectrl.CustomTreeCtrl控件,无论怎么设置构造函数的style值,都无法禁用滚动条。ScrolledWindow提供的EnableScrolling方法也没有效果,因此,要想实现隐藏滚动条还必须另辟蹊径。
Windows API--ShowScrollBar
好在windows提供了一些API可以才滚动条的属性,其中ShowScrollBar函数可以实现滚动条的显示与隐藏,因此可以使用该API来控制wxPython控件wx.lib.agw.customtreectrl.CustomTreeCtrl的滚动条的隐藏与显示。
ShowScrollBar方法签名:
BOOL ShowScrollBar( _In_ HWND hWnd, _In_ int wBar, _In_ BOOL bShow);
其中参数hWnd为要控制滚动条控件的句柄,wBar为滚动条选项,包括:SB_HORZ(0),表示标准横向滚动条;SB_VERT(1),表示标准纵向滚动条;SB_CTL(2),表示滚动条控件;SB_BOTH(3),表示标准横纵滚动条。bShow则表示显示或隐藏,True为显示,False为隐藏。
ShowScrollBar调用
在控件的构造函数中调用该api隐藏滚动条,经过测试是不行的,需要在EVT_PAINT事件中调用,并且必须要调用event.Skip()以调用其他已注册的EVT_PAINT事件的处理方法。另外windows api ShowScrollBar在python中的定义,需要导入ctypes库。部分代码如下,首先是导入ctypes和常量定义:
import wximport wx.lib.agw.customtreectrl as CTimport ctypesSB_HORZ = 0SB_VERT = 1SB_CTL = 2SB_BOTH = 3
接着是自定义控件:
class MyCustomTreeCtrl(CT.CustomTreeCtrl): def __init__(self, parent, id = -1, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.VSCROLL): CT.CustomTreeCtrl.__init__(self, parent, wx.ID_ANY, style = wx.VSCROLL, agwStyle = wx.TR_HAS_VARIABLE_ROW_HEIGHT | wx.TR_NO_BUTTONS | wx.TR_EXTENDED | wx.TR_FULL_ROW_HIGHLIGHT | wx.TR_HIDE_ROOT | wx.TR_NO_LINES) self.EnableSelectionVista(True) self.SetGradientStyle(1) self.SetBackgroundColour(wx.WHITE) self.SetBorderPen(wx.TRANSPARENT_PEN) self.Bind(wx.EVT_PAINT, self._on_hide_scrollbar) def _on_hide_scrollbar(self, event): ctypes.windll.user32.ShowScrollBar(self.GetHandle(), SB_VERT, False) event.Skip()
- 隐藏wx.lib.agw.customtreectrl.CustomTreeCtrl滚动条
- wx.grid没有滚动条
- wx.ScrolledWindow (或 ScrolledPanel ) 中的滚动条
- 区域滚动隐藏滚动条
- 怎么隐藏滚动条?
- 隐藏纵向滚动条
- 隐藏滚动条
- C#隐藏滚动条.
- 隐藏浏览器滚动条
- 隐藏滚动条
- 怎么隐藏滚动条
- CWebBrowser2隐藏滚动条
- 如何隐藏滚动条
- 隐藏网页滚动条
- 怎么隐藏滚动条
- qt隐藏滚动条
- textarea隐藏滚动条
- 隐藏横向滚动条
- POJ 1659
- 一个SQL逻辑读异常的解决方法
- PHP在SAE中的学习笔记(一)
- JSP九大内置对象详解
- Android布局
- 隐藏wx.lib.agw.customtreectrl.CustomTreeCtrl滚动条
- phpize
- 从PhysX2.8升级到PhysX3.2(1)
- TCP/IP详解--学习笔记(2)-数据链路层
- orac-123154:TNS:无法解析指定的连接标示符
- android源代码的下载
- win7开始菜单没有运行的解决方法
- Java基础---第六天 面向对象
- 【M3U8】测试地址及android播放器