隐藏wx.lib.agw.customtreectrl.CustomTreeCtrl滚动条
版权所有,转载请注明出处: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 wx
import wx.lib.agw.customtreectrl as CT
import ctypesSB_HORZ = 0
SB_VERT = 1
SB_CTL = 2
SB_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滚动条相关推荐
- 隐藏多行文本框的滚动条
<textarea style="overflow:hidden"></textarea> 会隐藏多行文本框的滚动条,但文字加多少,滚动条也不会出现. 只有 ...
- python在线编辑器可视化_python软件——wxpython可视化编辑器 v4.1附使用教程
wxpython v4.1pc版更新日志 1.将wx.Font.AddPrivateFont的示例添加到演示中. 2.在wx.TextCtrl中为OSXEnableAutomaticQuoteSubs ...
- python3:wxpython分割窗、通过菜单项切换左面板树形控件
1. 功能概述 这里简单介绍下,通过分割窗垂直分割出两块区域,并绑定两个面板,左面板绑定3个树形控件,初始隐藏.然后添加菜单,绑定事件,通过点击菜单来切换树形控件的显示 2. 效果图 ...
- wxPython:Python首选的GUI库 | CSDN博文精选
作者 | 天元浪子 来源 | CSDN博客 文章目录 概述 窗口程序的基本框架 事件和事件驱动 菜单栏/工具栏/状态栏 动态布局 AUI布局 DC绘图 定时器和线程 后记 概述 跨平台的GUI工具库, ...
- wxpython如何分开界面和运行代码_如何调试wxPython Demon源代码及几个细节
在调试demon代码时,常会碰到一些模块无法导入的情况,这是因为好多模块不是Python的标准库, 而是demon安装目录下的库文件,所以学习demon源码的时候,要把这些库copy到同一个目录下, ...
- python安装wxpython库_wxPython:python 首选的 GUI 库
原标题:wxPython:python 首选的 GUI 库 作者:许向武 blog.csdn.net/xufive/article/details/82665460 概述 跨平台的GUI工具库,较为有 ...
- xwpython aui 子窗口-Python/wxPython:AUI管理器,防止面板离开Fram
我用下面的代码来测试AUI的一些特性.如果运行代码,应该会找到一个框架,其中有两个面板,可以分离/浮动.但是,面板可以拖动到屏幕上的任何位置.我想防止面板离开主机架.这可能吗?我以为会有一面旗帜或是我 ...
- pythongui界面实例_wxPython:python首选的GUI库实例分享(5)
AUI布局 Advanced User Interface,简称AUI,是 wxPython 的子模块,使用 AUI 可以方便地开发出美观.易用的用户界面.从2.8.9.2版本之后,wxPython ...
- 用声卡实现的存储示波器
用声卡实现的存储示波器 文章目录 用声卡实现的存储示波器 背景知识 采样频率 量化精度 生产者/消费者模式 总体规划 设计目标 功能规划 界面规划 程序结构 从声卡采集数据 声音采集类的定义 消费者/ ...
最新文章
- 关于Java中try-catch-finally-return的执行顺序
- linux上传文件到服务器
- vc 代码检查工具_C++网络安全入侵检测技术模块及源程序代码
- 阿里云人工智能ET夺肺结节诊断世界冠军
- iframe父子页面间的关系
- (软件工程复习核心重点)第三章需求分析-第三节:状态转换图
- C#LeetCode刷题之#257-二叉树的所有路径(Binary Tree Paths)
- ROS笔记(29) 启动Movelt!
- 4-1 可复用性概述
- UVA11361 Investigating Div-Sum Property
- Linux系统多网卡环境下的路由配置
- 如何养成好的Linux操作习惯
- 2008服务器怎么建网站,2008系统快速搭建网站教程
- 计算机毕业论文附录的模板,毕业论文附录格式要求
- 生物识别技术在汽车领域带来了巨大变革
- AWS System Manger 批量操作EC2 实例
- MFC中通过SendMessage修改Edit控件的文本
- PS如何查看所选图层的实际像素?
- ERROR 1010 (HY000): Error dropping database (can‘t rmdir ‘.\qpweb‘, errno: 41) 删库失败问题的解决
- 〖Python自动化办公篇⑫〗- Excel 文件自动化 - 读取 excel 数据