pycxsimulator TclError Ubuntu
Попытка запустить этот маленький кусочек кода на Ubuntu 14.04
import matplotlib
matplotlib.use('TkAgg')
import pylab as PL
import random as RD
import scipy as SP
RD.seed()
populationSize = 100
noiseLevel = 1
def init():
global time, agents
time = 0
agents = []
for i in xrange(populationSize):
newAgent = [RD.gauss(0, 1), RD.gauss(0, 1)]
agents.append(newAgent)
def draw():
PL.cla()
x = [ag[0] for ag in agents]
y = [ag[1] for ag in agents]
PL.plot(x, y, 'bo')
PL.axis('scaled')
PL.axis([-100, 100, -100, 100])
PL.title('t = ' + str(time))
def step():
global time, agents
time += 1
for ag in agents:
ag[0] += RD.gauss(0, noiseLevel)
ag[1] += RD.gauss(0, noiseLevel)
import pycxsimulator
pycxsimulator.GUI().start(func=[init,draw,step])
но получил следующее сообщение об ошибке:
Traceback (most recent call last):
File "/home/joaomeirelles/Documents/USP/TESE/exemplos/pycx-0.31/abm-randomwalk.py", line 49, in <module>
pycxsimulator.GUI().start(func=[init,draw,step])
File "/home/joaomeirelles/Documents/USP/TESE/exemplos/pycx-0.31/pycxsimulator.py", line 48, in __init__
self.initGUI()
File "/home/joaomeirelles/Documents/USP/TESE/exemplos/pycx-0.31/pycxsimulator.py", line 77, in initGUI
self.status.grid(row=1,column=0,padx=2,pady=2,sticky='nswe')
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1985, in grid_configure
+ self._options(cnf, kw))
_tkinter.TclError: cannot use geometry manager grid inside . which already has slaves managed by pack
[Finished in 0.4s with exit code 1]
Кто-нибудь знает, что это может быть? Я пытался использовать разные версии Tcl / Tk (8.5 и 8.6) и обновлять MGLTools, но ни одна из них не работала.
спасибо JM
2 ответа
Я закомментировал строку 75: #self.notebook.pack(разверните = ДА, заполните = ОБА, padx=5, pady=5, сторона =TOP) и строку 78: #self.status.pack(side=TOP, fill=X, padx=1, pady=1, расширение = НЕТ)
После этого модели, которые я попробовал, все работало.
Сообщение об ошибке говорит вам, в чем именно заключается проблема:
не может использовать сетку менеджера геометрии внутри. который уже имеет рабов, управляемых пакетом
Это означает, что где-то в вашем коде вы звоните .pack(...)
на виджете, который является дочерним элементом корневого окна ("подчиненные управляемые пакетом"), а позже вы звоните .grid(...)
на другом виджете, который также является дочерним элементом корневого окна ("не может использовать сетку менеджера геометрии...").
В пределах любого данного окна контейнера (фрейма, корневого окна, верхнего уровня) все прямые дочерние элементы могут управляться только сеткой ИЛИ пакетом, но не обоими.