Python 3.x 从医学图像的orthoviewer获取zdata with事件

Python 3.x 从医学图像的orthoviewer获取zdata with事件,python-3.x,numpy,matplotlib,tkinter,nibabel,Python 3.x,Numpy,Matplotlib,Tkinter,Nibabel,我想在加载.nii文件时从导航工具栏获取zdata。我想用事件def\u onclick(事件): 导入matplotlib matplotlib.use('TkAgg') 从tkinter导入文件对话框 从tkinter进口* 从matplotlib.backends.backend_tkagg导入图CAVASTKAGG,导航工具栏2TKAGG 从nibabel.loadsave导入读取\u img\u数据 从nibabel.loadsave导入加载为加载 从查看器导入正交切片R3d 从mat

我想在加载.nii文件时从导航工具栏获取zdata。我想用事件
def\u onclick(事件):

导入matplotlib
matplotlib.use('TkAgg')
从tkinter导入文件对话框
从tkinter进口*
从matplotlib.backends.backend_tkagg导入图CAVASTKAGG,导航工具栏2TKAGG
从nibabel.loadsave导入读取\u img\u数据
从nibabel.loadsave导入加载为加载
从查看器导入正交切片R3d
从matplotlib.figure导入图形
将numpy作为np导入
导入系统
如果系统版本信息[0]<3:
将Tkinter作为Tk导入
其他:
将tkinter作为Tk导入
root=Tk.Tk()
root.wm_标题(“用于大脑分割的正交切片”)
f=图()
矢状面=f.add_子图(221)
矢状面设置位置([0,0,0.5,0.5])
矢状面。设置轴偏移()
冠状面=f.add_子地块(222)
日冕轴偏移()
冠状位(0,0.5,0.5,0.5])
轴向=f.add_子批次(223)
轴向设定位置([0.5,0.5,0.5,0.5])
轴向。将轴设置为off()
轴=(矢状、冠状、轴向)
#拉文加地区
canvas=FigureCanvasTkAgg(f,master=root)
canvas.get_tk_widget().pack(side=tk.RIGHT,fill=tk.BOTH,expand=1)
toolbar=NavigationToolbar2TkAgg(画布,根)
toolbar.update()
canvas.\u tkcanvas.pack(side=Tk.RIGHT,fill=Tk.BOTH,expand=0)
def_load():
data=filedialog.askopenfilename(initialdir=“/”,title=“Select file”,filetypes=(“nii文件”,“*.nii”),(“gz文件”,“*.gz”),(“所有文件”,“*.nii”))
数据负载=负载负载(数据)
数据读取=读取图像数据(数据加载)
数据读取=np.asanyarray(数据读取)
OrthoSlicer3D(数据读取,轴=轴).show()
coords=[]
def_onclick(事件):
coords.append((event.xdata、event.ydata、event.zdata))
回程坐标
canvas.mpl\u connect('button\u press\u event','u onclick)
buttonLoad=Tk.Button(master=root,text='Load',command=\u Load)
按钮加载包(侧面=左侧,展开=1)
Tk.mainloop()
但回溯是:

回溯(最近一次呼叫最后一次):
文件“C:\Users\migue\Documents\IM\TFG\venv\lib\site packages\matplotlib\cbook\\uuuu init\uuuu.py”,第388行,正在处理中
代理(*args,**kwargs)
文件“C:\Users\migue\Documents\IM\TFG\venv\lib\site packages\matplotlib\cbook\\uuuuuu init\uuuuuu.py”,第228行,在调用中__
返回mtd(*args,**kwargs)
文件“C:/Users/migue/Documents/IM/TFG/pruebsd.py”,第58行,点击
coords.append((event.xdata、event.ydata、event.zdata))

AttributeError:“MouseeEvent”对象没有属性“zdata”

一个可能的选项是使用的答案。它使用figure.gca,我想使用子批次
import matplotlib
matplotlib.use('TkAgg')
from tkinter import filedialog
from tkinter import *
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from nibabel.loadsave import read_img_data
from nibabel.loadsave import load as load_nii
from viewers import OrthoSlicer3D
from matplotlib.figure import Figure
import numpy as np

import sys
if sys.version_info[0] < 3:
    import Tkinter as Tk
else:
    import tkinter as Tk

root = Tk.Tk()
root.wm_title("Orthoslicer3D for brain segmentation")

f = Figure()

sagital = f.add_subplot(221)
sagital.set_position([0,0,0.5,0.5])
sagital.set_axis_off()

coronal = f.add_subplot(222)
coronal.set_axis_off()
coronal.set_position([0,0.5,0.5,0.5])

axial = f.add_subplot(223)
axial.set_position([0.5,0.5,0.5,0.5])
axial.set_axis_off()

axes = (sagital, coronal, axial)


# a tk.DrawingArea
canvas = FigureCanvasTkAgg(f, master=root)
canvas.get_tk_widget().pack(side=Tk.RIGHT, fill=Tk.BOTH, expand=1)

toolbar = NavigationToolbar2TkAgg(canvas, root)
toolbar.update()
canvas._tkcanvas.pack(side=Tk.RIGHT, fill=Tk.BOTH, expand=0)

def _load():
    data = filedialog.askopenfilename(initialdir = "/", title = "Select file", filetypes = (("nii files","*.nii"),("gz files", "*.gz"),("all files","*.*")))
    data_load = load_nii(data)
    data_read = read_img_data(data_load)
    data_read = np.asanyarray(data_read)
    OrthoSlicer3D(data_read, axes=axes).show()


coords = []


def _onclick(event):
    coords.append((event.xdata, event.ydata, event.zdata))
    return coords

canvas.mpl_connect('button_press_event', _onclick)

buttonLoad = Tk.Button(master=root, text='Load', command=_load)
buttonLoad.pack(side=Tk.LEFT, expand = 1)

Tk.mainloop()