pycxsimulator TclError Ubuntu

#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, но не с помощью обоих.