当我试图创建Matplotlib按钮时,出现了一个神秘的错误。你知道吗
我有一个类,它有许多Matplotlib轴作为实例属性。我正在用以下调用实例化按钮:
Button(self.energy_diagram, 'Show Attractors')
我得到以下错误:
Traceback (most recent call last):
File "ocr.py", line 20, in <module>
myNet.run_visualization(training_data, learning_data)
File "/home/daniel/Documents/coding/visuals.py", line 93, in run_visualization
self._plot_energy()
File "/home/daniel/Documents/coding/visuals.py", line 235, in _plot_energy
Button(self.energy_diagram, 'Show Attractors')
File "/usr/local/lib/python3.4/dist-packages/matplotlib/widgets.py", line 191, in __init__
transform=ax.transAxes)
TypeError: text() missing 1 required positional argument: 's'
有趣的是,如果我将它添加到我的图形中的其他轴上,按钮就会工作,self.energy_diagram
轴是唯一一个3d轴,所以我想知道这是否与此有关。你知道吗
任何帮助都将不胜感激!你知道吗
首先,你的错误信息。这很令人惊讶,但相当清楚。你关于有问题的轴是唯一的三维轴的注释是关键。有无错误的两个最小示例:
首先,看一下/usr/local/lib/python3.4/dist-packages/matplotlibwidgets.py文件,在191行附近:
这个按钮试图调用它被放入的
Axes
的text
方法,这个调用产生了错误。使用help
的ha1.text
(绑定版本的matplotlib.pyplot.Axes.text
):与
ha2.text
(绑定版本的mpl_toolkits.mplot3d.Axes3D.text
)相同:找出区别:后一个函数也必须接收
z
坐标,以便将文本放置在3d轴上。有道理。Button
小部件并不是设计用来处理3d轴的。你知道吗现在,您可以尝试自己解决这个问题,尽管
Button
显然缺乏3d轴支持这一事实表明,您迟早会向自己的脚开枪。无论如何,您实际上可以通过用ha1
的方法覆盖ha2
的text
方法来消除错误,并进行一些调整以将self
放在正确的位置。再说一次,我不是说这不能打破任何东西,也不是说这是可怕的事情,但这是一个选择:值得一提的是,它现在看起来和2d版本一样糟糕:
这就引出了我的最后一点。据我所知,小部件会自动占据它们所放入的整个轴。似乎合理的做法是不把一个小部件(一个固有的2d对象)放到一个3d轴上:你到底想让它怎么定位?显而易见的解决方案是将每个小部件存储在自己的轴上,在其他GUI组件和图形的上方/旁边。这样,您就可以自然地为每个小部件使用2d轴。我相信这是做这件事的标准方法,这也许可以解释为什么没有明确提到不支持3d轴。为什么会这样?你知道吗
相关问题 更多 >
编程相关推荐