我正在开发一个项目,在该项目中我创建了一个嵌入 GTK 容器中的绘图,并且我需要能够单击 x 和 y 轴的限制来更改它们的界限。
到目前为止,这就是我必须创建的挑选事件
def makepickers(self):
xaxis = self.ax.get_xticklabels()
yaxis = self.ax.get_yticklabels()
self.axlbls = (xaxis[0], xaxis[-1], yaxis[0], yaxis[-1])
for entry in self.axlbls:
entry.set_picker(True)
获取刻度标签并将每个轴的上限和下限的选取器属性设置为 true。
双击限制我创建一个 gtk 对话框,弹出并要求输入限制,然后将其传递给轴并调整图形大小并重新制作选择器
def onpick(self, event):
pickedtick = event.artist
if event.mouseevent.dblclick:
dialog = gtk.Dialog(title='Set Limits',
parent=None,
flags=0,
buttons=(gtk.STOCK_OK, gtk.RESPONSE_OK))
lbl = gtk.Label("Set Axis Limit")
entry = gtk.Entry()
dialog.vbox.pack_start(lbl, True, True, 0)
dialog.vbox.pack_start(entry, True, True, 0)
entry.show()
lbl.show()
response = dialog.run()
if response == gtk.RESPONSE_OK:
newlim = float(entry.get_text())
dialog.destroy()
idx = self.axlbls.index(pickedtick)
if self.lim_option_x == 'Manual':
if idx == 0: # x lower limit
self.ax.set_xlim(left=newlim)
if idx == 1: # x upper limit
self.ax.set_xlim(right=newlim)
if self.lim_option_y == 'Manual':
if idx == 3: # y upper limit
self.ax.set_ylim(top=newlim)
if idx == 2: # y lower limit
self.ax.set_ylim(bottom=newlim)
del self.axlbls
self.ax.relim()
self.ax.autoscale_view()
self.canvas.draw()
self.makepickers()
“手动”选项由位于类中的复选框(每个轴上)确定。
我的问题是它在调整限制大小的前几次有效,但每隔一段时间就会出现一个错误,它指出,
idx = self.axlbls.index(pickedtick)
ValueError: <matplotlib.text.Text object at 0x02D00870> is not in list
这也不是一个一致的错误。每次重新绘制画布或将新点添加到可能会重新绘制轴的图形时,我都会重新制作选择器。不确定是否有人知道为什么会出现这种情况。帮助将不胜感激。