我正在将一个程序(VMD,视觉分子动力学)移植到 Python 3.x,该程序是用 C++ 编写的,并且嵌入了 Python 和 TCL 解释器。其大部分 UI 是使用 TCL/TK 框架和 OpenGL 进行硬编码的,因此 UI 刷新是手动完成的。当 Python 解释器运行时,可以动态创建新窗口,甚至可以使用 Tkinter 将新菜单添加到主 UI。在这种情况下,所有 TK 事件都会通过定期调用 Python 端的一些代码来刷新(见下文)。这确保了所有更新都是线程安全的并且不会破坏解释器。
int PythonTextInterp::doTkUpdate() {
// Don't recursively call into dooneevent - it makes Tkinter crash for
// some infathomable reason.
if (in_tk) return 0;
if (have_tkinter) {
in_tk = 1;
int rc = evalString(
"import Tkinter\n"
"while Tkinter.tkinter.dooneevent(Tkinter.tkinter.DONT_WAIT):\n"
" pass\n"
);
in_tk = 0;
if (rc) {
return 1; // success
}
// give up …Run Code Online (Sandbox Code Playgroud) 我正在使用SWIG将我的C++代码包装到Python中.但浮点数的转换很奇怪.例如,如果我有下面的函数(用C++编写)
float foo() {
float x=62.02;
return x;
}
Run Code Online (Sandbox Code Playgroud)
并在Python中执行它(在使用SWIG包装之后)
>>> import mymodule
>>> mymodule.foo()
62.02000045776367
>>>
Run Code Online (Sandbox Code Playgroud)
它返回62.02000045776367而不是62.02.
有没有办法告诉SWIG如何进行正确的转换?