wxPython的一些笔记

最近在用wxPython写GUI的小程序,个人觉得wxPython还是很好用的东西,然而document有些地方没说清楚,结果折腾很长时间才发现是很简单的问题,所以在这边先笔记一下。

  • 基于wxWidgets的界面设计可以用wxFormBuilder,能输出C++,Python和XML代码,挺方便的。
  • wxTreeCtrlKey_Down事件不写入event。如果想获得Key_Down事件发生时相关的node,不要用event.GetItem(),而应该用tree.GetSelectedItem()
  • wxListCtrl要选中某个对象可以直接用Select(index)方法(貌似文档上没有记载),这样选中之后不会触发滚动。
  • wxListCtrlScrollTo某个对象可以用EnsureVisible(index)方法,文档上也没有记载
  • wxListCtrl远不如wxGrid好用。最简单的例子是wxListCtrlbind滚动事件十分困难。例如我的程序中有两个wxListCtrl,希望让两者同步选中,同步滚动,结果四处google都没找到解决方案。我最终采用的方式如下
  1. 继承这个地方提供的Scroll_binder类,处理滚轮,pagedown/pageup和drag事件。不要忘了把Scroll_binder里头的_key_down事件改成event.Skip()
  2. 重载EVT_LIST_ITEM_SELECTED事件,使用Select方法使两者选中项一致,使用EnsureVisible方法保证两边的选中项都出现在屏幕上。 注意,如果不做第二步,只改第一步,会发现Scroll_binder()并没有处理键盘动作引起的滚动事件。由于键盘事件引起的滚动肯定伴随选项的变化(而且变化的结果都是选中项现在最下面或者最上面),所以正好可以实现Scroll_binder中没有完成的键盘滚动事件同步。
2012-05-17 15:37317