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)
Заранее спасибо!