Tkinter "out of stack stack" ошибка с Pymol на Windows

Я писал плагин для Pymol (программное обеспечение для визуализации макромолекулярных структур). Для этого я использую python и tkinter.

Мой плагин работает, и я могу зарегистрировать его в меню "Плагин" Pymol.

После установки файла plugin.py из собственного менеджера плагинов Pymol, есть три варианта запуска плагина:

1) Меню плагинов -> "Имя плагина" | Работает на Linux и Windows

2) Командная строка Pymol -> Testplugin | Работает только на Linux

3) из главного окна Пимол CTRL+F | Работает только на Linux

Ошибка, которую я получаю в случаях 2 и 3 на компьютерах с Windows, заключается в следующем:

Traceback (most recent call last):
  File "C:\Program Files (x86)\PyMOL_1760\PyMOL/modules\pymol\parser.py", line 256, in parse
    self.result=apply(layer.kw[0],layer.args,layer.kw_args)
  File "C:\Program Files (x86)\PyMOL_1760\PyMOL/modules\pmg_tk\startup\tkintertest.py", line 43, in showWindow
    top = Toplevel(parent)
  File "C:\Program Files (x86)\PyMOL_1760\PyMOL\py27\lib\lib-tk\Tkinter.py", line 2017, in __init__
    BaseWidget.__init__(self, master, 'toplevel', cnf, {}, extra)
  File "C:\Program Files (x86)\PyMOL_1760\PyMOL\py27\lib\lib-tk\Tkinter.py", line 1974, in __init__
    (widgetName, self._w) + extra + self._options(cnf))
TclError: out of stack space (infinite loop?)

Я предоставил минимальный "рабочий" код плагина ниже. Все, что нужно сделать, это просто открыть новое окно и отобразить ярлык "Testlabel". Опять же, вы можете запустить плагин из Pymol в Linux всеми тремя методами, тогда как в Windows работает только первый метод, а два других выдают ошибку "out of stack" выше. Это было проверено с различными версиями Windows/Linux/Pymol.

Пример минимального кода:

#! /usr/bin/env python

from Tkinter import *
from pymol import cmd, plugins


class Testplugin(Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.pack()      
        self.create_widgets()

    def create_widgets(self):

        self.labelTest = Label(self,
            text = "Testlabel"
        )

        self.labelTest.grid(
            in_ = self,
            column = 1,
            row = 1,
            columnspan = 1,
            ipadx = 0,
            ipady = 0,
            padx = 0,
            pady = 0,
            rowspan = 1,
            sticky = "n"
        )

        self.grid_rowconfigure(1, minsize = 30, pad = 3)
        self.grid_columnconfigure(1, minsize = 30, pad = 3)


def __init__(self):
    self.menuBar.addmenuitem("Plugin", "command", label="Testplugin", command = showWindow)

def showWindow():
    parent = plugins.get_tk_root()
    top = Toplevel(parent)
    frame = Testplugin(top)

cmd.extend("Testplugin", showWindow)
cmd.set_key("CTRL-F", showWindow)

Заранее спасибо!

0 ответов

Другие вопросы по тегам