#python #python-2.7 #tkinter #tk #pycxsimulator
#python #python-2.7 #tkinter #tk-toolkit #pycxsimulator
Вопрос:
Пытаюсь запустить этот небольшой фрагмент кода в 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
Комментарии:
1. Как вы думаете, почему это проблема matplotlib? Обратная трассировка исходит из того, что когда-либо
pycxsimulator
было2. Опубликованный вами код не содержит строки, которая выдает ошибку.
Ответ №1:
Я закомментировал строку 75: #self.notebook.pack (развернуть =ДА, заполнить = ОБА, padx = 5, pady = 5, side = TOP) и строку 78: #self.status.pack (сторона= ВЕРХНЯЯ, заполнить = X, padx = 1, pady = 1, развернуть = НЕТ)
После этого все модели, которые я пробовал, работали.
Комментарии:
1. К сожалению, хотя это запускает программы, я считаю, что это нарушает визуализацию в pycx.
Ответ №2:
Сообщение об ошибке точно сообщает вам, в чем проблема:
невозможно использовать сетку geometry manager внутри. у которого уже есть подчиненные устройства, управляемые pack
Это означает, что где-то в вашем коде вы вызываете .pack(...)
виджет, который является дочерним по отношению к корневому окну («подчиненные устройства, управляемые pack»), а позже вы вызываете .grid(...)
другой виджет, который также является дочерним по отношению к корневому окну («невозможно использовать geometry manager grid …»).
В любом заданном окне контейнера (фрейм, корневое окно, верхний уровень) всеми прямыми дочерними элементами можно управлять только с помощью grid ИЛИ pack, но не с помощью обоих.