Python / wxPython 学习笔记 – Day 2 多线程 / 文本编码

转到Ubuntu学习已经很长时间,另外在VirtualBox虚拟机中安装了WinXP,以检测跨平台的问题。
关于多线程,我想实现的功能具体是:子线程运算,更新主线程进度条; 子线程调用外部进程获取返回值,更新主线程进度条

文本编码问题

我的第一个wxpython程序的第一个版本中,我为了在windows系统下正确显示中文,大量采用了

.encode('gbk')

的输出方式,然而这种方式在默认编码为UTF-8的Linux系统下无法正常显示。
so how to solve it?
下面是我的解决方法:
1, 在win下安装wxpython的unicode版本,直接传unicode字符串给wxpython相关方法,即可显示中文
2, 调用外部命令等必须严格按照系统编码的时候,可以采用下面的编码方式(当然,先import sys):

.encode(sys.getfilesystemencoding())

这样即可达到相当好的跨平台兼容性:)

Continue reading Python / wxPython 学习笔记 – Day 2 多线程 / 文本编码

解决依赖关系,让Debian/Ubuntu下的boa-constructor使用wxgtk2.8

Debian/Ubuntu下的boa-constructor有对python-wxgtk2.6的依赖关系,即使安装了python-wxgtk2.8,boa-constructor仍然只调用2.6版本。Felix通过以下的步骤解决了这个问题(以Ubuntu为例):

1, 首先找到boa-constructor的安装文件,默认位置在 /var/cache/apt/archives/boa-constructor_0.6.1-9ubuntu1_all.deb
使用下面的命令将文件复制到当前目录:

cp /var/cache/apt/archives/boa-constructor_0.6.1-9ubuntu1_all.deb .

2, 建立文件夹boanew, 为解压deb文件做准备

mkdir boanew

3, 解压boa-constructor的deb控制文件:

dpkg-deb -e ./boa-constructor_0.6.1-9ubuntu1_all.deb ./boanew/DEBIAN

4, 解压程序文件:

dpkg-deb -x ./boa-constructor_0.6.1-9ubuntu1_all.deb ./boanew
Continue reading 解决依赖关系,让Debian/Ubuntu下的boa-constructor使用wxgtk2.8

Python, wxPython / Boa Constructor 学习笔记 – Day 1

在GTK+, QT 和 wxWidgets 之间犹豫了挺长时间, 最后还是选择了wxWidgets(其实我只是看中了”native”控件)

现在我的软件环境是:

Windows 7 x86_64
Python 2.6.5
wxPython 2.8.10.1
Boa Constructor 0.6.1

一开始见到这IDE, 我仿佛又看到了Delphi…
点击上面板上 New => wx.App 就可以创建新的wxPython 应用程序了
(一开始我直接点了wx.Frame, 结果还花了点力气才让窗口能显示出来…)

然后新建 wxFrame, 在wx.Frame界面的时候, Editor 窗口的工具栏上会出现传说中的 Frame Designer. 就是他了!

关于Sizer:

对于以前从未用过Sizer及其类似物(VB6用数行代码实现类似功能), 起初使用Sizer我是相当的不适应.
大致摸索几次之后, 慢慢找到了规律 比如从上而下是如下结构的窗体:
工具栏
结果文本框
状态栏
这是窗口的底层结构,所以用wx.BoxSizer实现上下排列(其中工具栏需要用子Sizer)

然后把wx.FlexGridSizer填到刚建立的boxSizer1里, 主体构架就完了:)
接下来就和我熟悉的VB6一样, 一个个拖需要的控件到窗体上…

选中特定控件后,可以在左侧Inspector里打开Evts, 在左侧列表里选择事件类别, 然后双击右侧具体需要的事件. 在退出Designer的时候, 相应的Bind和函数会自动建好.

!!注意:不要在Sizer里留不存在的控件或者None控件, 否则退出Designer时会收到一条警告,并且在无更改的情况下, 程序是不能运行的.

Sizer窗口里点击相应控件, 和在窗体上直接点击, 出现在左侧Inspector里的属性是不一样的. 初次使用Sizer看到控件密密麻麻挤在一起很不爽, 可以给相应控件加上一定的Border, 并且在Flags里把wx.ALL设为True.

Flag -> wx.EXPAND设为True的时候, 会根据Sizer类型”占领”相应方向的全部空间. 比如使用BoxSizer的时候给文本框勾上wx.EXPAND, 则文本框左右范围会覆盖整个窗体. 如果希望上下也覆盖整个窗体, 可以加大Proportion属性的设置.

Continue reading Python, wxPython / Boa Constructor 学习笔记 – Day 1
QR Code Business Card