小编Cai*_* S.的帖子

替代 tkinter.dooneevent

我正在将一个程序(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)

c++ python tk-toolkit tkinter python-3.x

5
推荐指数
1
解决办法
2648
查看次数

C++浮动到Python浮动错误转换

我正在使用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如何进行正确的转换?

c++ python swig

0
推荐指数
1
解决办法
1998
查看次数

标签 统计

c++ ×2

python ×2

python-3.x ×1

swig ×1

tk-toolkit ×1

tkinter ×1