Archive for the ‘ python ’ Category

解决“Unable to find vcvarsall.bat”错误

今天在安装PyAMF时老是发生Unable to find vcvarsall.bat的错误,上网找了一下,在eddsn找到了“Unable to find vcvarsall.bat” error when trying to install rdflib这么一篇文章,解决了问题。方法如下:

  1. 首先安装MinGW,在MinGW的安装目录下找到bin的文件夹,找到mingw32-make.exe,复制一份更名为make.exe
  2. MinGW的路径添加到环境变量path中,比如我把MinGW安装到D:\MinGW\中,就把D:\MinGW\bin添加到path中;
  3. 打开命令行窗口,在命令行窗口中进入到要安装代码的目录下;
  4. 输入如下命令就可以安装了。
setup.py install build --compiler=mingw32

wxPython的树形目录控件

自从开始学wxPython以来就一直想找到一个树形目录控件,但却一直没找到,我还以为wxPython根本就没有提供这样的控件。前几天无意中在wxPython演示文件里找到了这个控件,欣喜若狂,小研究了下,编写了一个小型的演示,可以输出所激活文件的路径名。代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Created on 2009-10-17

@author: jon.ju@msn.com
'''
import wx
import os
import sys

class myApp(wx.App):

	def OnInit(self):
		frame=wx.Frame(parent=None,title='GenericDirCtrl')
		panel=wx.Panel(frame,-1)

		# 目录控件
		self.dir1 = wx.GenericDirCtrl(panel, -1,dir="E:", size=(200,225), style=0)

		# 目录控件中的树形控件
		self._tree=self.dir1.GetTreeCtrl()

		# 绑定激活文件行为,如双击文件时
		self.dir1.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnOpen)
		frame.Show()
		return True

	# 双击文件时显示文件路径
	def OnOpen(self,evt):
		# 如果对象是目录,则打印'这是目录'
		if os.path.isdir(self.dir1.GetPath()):
			print '这是目录'
			evt.Skip()
			return

		# 如果对象是文件,则显示文件目录
		else:
			print self.dir1.GetFilePath().encode(sys.getfilesystemencoding())

if __name__=='__main__':
	app=myApp(False)
	app.MainLoop()

这里所用到的树形目录控件就是GenericDirCtrl,它继承自wxPython的树控件,所以树控件的属性和行为,GenericDirCtrl都是可以直接使用的。

python中文乱码

虽然python的print命令可以用加“# -*- coding: cp936 -*-”方式输出中文,但在wxPython里如果用这种方法做按钮标题等仍然是乱码,后来找到了一个方法:在源文件头部的第一行或第二行加上源文件的文件编码格式就可以了,如下:

# coding=<encoding name>

或:

#!/usr/bin/python
# -*- coding: <encoding name> -*-

其中的“<encoding name>”就是文件编码格式,如我用的格式是utf-8的,我的前两行是:

#!/bin/env python
# -*- coding: utf-8 -*-