解决Ulipad和有道词典冲突的问题

Ulipad和目前版本的有道词典有冲突,表现为先开有道词典,Ulipad就无法运行。

解决方法是:找到Ulipad安装目录下的config.ini,添加以下两行:

    [server]
    port=50001

重启Ulipad,就不冲突了。

原因是Ulipad通过绑定指定端口来避免重复运行,而这个端口恰好与有道使用的端口一致。只要选一个未被其他软件使用的端口,就可以解决问题。

参考:http://code.google.com/p/ulipad/issues/detail?id=306, Ulipad FAQ.htm文件

more ...

利用tkFileDialog.askopenfilenames获取多个文件名

用Python写小脚本,要选择文件,最简单的方式莫过于使用内置的Tk的控件了。如果需要同时选择多个文件,可以使用tkFileDialog.askopenfilenames,如下:

    import tkFileDialog
    fns = tkFileDialog.askopenfilenames(filetypes=[("text file", "*.txt"),("all","*.*")])
    print(repr(fns))

但问题是,在Python 2.6以后的版本,tkFileDialog.askopenfilenames返回的居然是字符串,类似于这样:

    u'C:/Python27/LICENSE.txt C:/Python27/NEWS.txt C:/Python27/README.txt'

如果每个文件的路径中都没有空格,用fps.split()就可以分解字符串得到文件名的列表,如果文件名或文件路径中包含空格,这个字符串将很不好解析。解决方法如下 …

more ...

Python 3.x中的nonlocal及其在2.x中的变通办法

在Python 2.x中,函数内部可以定义函数,内层的函数可以读取外层函数的局部变量,但却不可以修改它.

    def outter():
        x = 1
        def inner():
            print("inner is called, x=", x)
        return inner

    outter()()

上面这个程序是没问题的,但是,下面这个就会出错:

    def outter():
        x = 1
        def inner():
            print("inner is called, x=", x)
            x = 2
        return inner

    outter()()

提示竟然是UnboundLocalError: local variable 'x' referenced before assignment,找不到变量 …

more ...

在 PyGraphviz 中使用中文

在 PyGraphviz 使用中文要注意的:

  • 汉字要使用 unicode ,例如:u"汉字"

  • 添加节点时要指定中文的字体,例如 fontname=SimSun

示例如下:

    import pygraphviz as pg

    G = pg.AGraph()

    G.add_node(u"经理", fontname="`Microsoft YaHei", shape="rect", style="rounded", fontsize=18) #雅黑
    G.add_node(u"秘书", fontname="SimHei") #黑体
    G.add_node(u"小兵", fontname="SimSun") #宋体
    G.add_node …
more ...