用户工具

站点工具


linux:python:python_tcl混合编程

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
linux:python:python_tcl混合编程 [2020/09/15 09:32] zhangguolinux:python:python_tcl混合编程 [2024/04/08 15:50] (当前版本) – [2. python zip tcl混合] zhangguo
行 32: 行 32:
  
 ==== - 添加命令 ==== ==== - 添加命令 ====
 +注:如果需要更多命令支持的话,可能需要自行查看''Lib/tkinter/__init__.py''文件。
  
 利用createcommand方法将一个Python函数作为命令添加到Tcl解释器中。 利用createcommand方法将一个Python函数作为命令添加到Tcl解释器中。
行 63: 行 63:
  
 def py_add(a, b): def py_add(a, b):
-    return int(a)+int(b)+    return int(a)+int(b) # 从tcl侧传递进来的全部是字符,需要进行适当的类型转换后再使用。
  
 def tcl_py_add(*args): def tcl_py_add(*args):
行 83: 行 83:
 </code> </code>
  
 +=== - 使用注意 ===
 +python的命令加入tcl解释器之后,python侧出现的类型check错误信息不会显示在tcl中(<color #ed1c24>一般显示为一个空行</color>),这有时候会给定位带来非常大的困扰。
  
 +<color #ed1c24>一定要注意从tcl侧输入的参数传递到python之后都是字符串,如果原来python的参数是int的需要使用类型转换。</color>
  
  
行 168: 行 171:
  
 不要用这种方法获得简单变量以及list的值。 不要用这种方法获得简单变量以及list的值。
 +
 +
 +
 +
 +===== - python zip tcl混合 =====
 +**测试程序**
 +{{linux:python:pyziptcl.zip}}
 +
 +
 +<code python [enable_line_numbers="true"]>
 +#!/usr/bin/python3
 +
 +import tkinter
 + 
 + 
 +import zipfile
 +import io
 + 
 + 
 +fh = open('ab.zip', 'rb')
 +fbuf = fh.read()   # 读取zip二进制文件内容到buffer,注意buffer溢出。
 +fh.close()
 + 
 +fio = io.BytesIO()   #创建一个文件io
 + 
 +fio.write(fbuf)     #将zip二进制内容写入文件io
 + 
 + 
 + 
 +# zfile = zipfile.ZipFile('ab.zip', 'r')
 +zfile = zipfile.ZipFile(fio, 'r'  # 直接从文件io处操作,而不是指定硬盘上的文件。
 +for i in zfile.filelist:
 +    bin = zfile.read(i.filename)
 +    line = str(bin, encoding = "utf-8")
 +
 +    interp = tkinter.Tcl()
 +    interp.eval(line)
 +
 +</code>
 +    
 +**运行结果**
 +
 +<code>
 +(base) D:\pyzip>python pyzip.py
 +abc01
 +abc02
 +opq01
 +opq02
 +</code>
linux/python/python_tcl混合编程.1600133567.txt.gz · 最后更改: 2023/03/17 10:12 (外部编辑)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki