如何向ApplicationWindow()传递类参数?OrthoCanvas类fig变量传参方法
我来帮你搞定这两个问题,结合你给出的代码片段,咱们一步步拆解:
问题1:如何向ApplicationWindow()传递类中的参数?
要给ApplicationWindow传递参数,核心是修改它的构造函数(__init__方法),让它接受你需要的参数,然后在实例化时传入对应的值就行。
举个例子,如果你的ApplicationWindow原本是无参初始化的:
class ApplicationWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() # 原有的窗口初始化逻辑
那你可以给它添加参数,把需要的值传进去并保存为实例属性,方便后续使用:
class ApplicationWindow(QtWidgets.QMainWindow): # 这里添加你需要的参数,比如custom_param,还可以设置默认值 def __init__(self, custom_param, other_param=None): super().__init__() # 把传入的参数保存为实例属性 self.custom_param = custom_param self.other_param = other_param # 后续就可以在类的其他方法里用self.custom_param调用这个参数了
之后实例化ApplicationWindow时,直接把参数传进去:
aw = ApplicationWindow(your_target_parameter, optional_other_param)
问题2:如何将OrthoCanvas类中的变量fig作为参数传入aw = ApplicationWindow实例?
首先看你给出的OrthoCanvas代码,里面的fig是__init__方法里的局部变量,外部根本访问不到。所以第一步要把它改成实例属性,也就是用self.fig来定义,这样创建OrthoCanvas实例后,就能通过实例对象拿到这个fig了。
修改后的OrthoCanvas关键代码如下:
class OrthoCanvas(FigureCanvas): def __init__(self, parent=None, width=5, height=4, dpi=100): # 把局部变量fig改成实例属性self.fig self.fig = Figure(figsize=(width, height), dpi=dpi) # 注意:FigureCanvas的父类构造函数需要接收一个Figure实例,所以这里要把self.fig传进去 super().__init__(self.fig) self._figs = set([a.figure for a in self.axes]) data = load_nii('d_crop_mni_s01_t1w_hires_defaced_MNI.nii') data_read = read_img_data(data) for fig in self._figs: fig.canvas.mpl_connect('scroll_event', self._on_scroll) # 你的其他事件绑定代码(比如motion_notify_event)
接下来,先创建OrthoCanvas的实例,拿到它的fig属性,再传给ApplicationWindow:
# 1. 创建OrthoCanvas实例 canvas = OrthoCanvas() # 2. 把canvas的fig属性作为参数传给ApplicationWindow aw = ApplicationWindow(canvas.fig)
如果你的ApplicationWindow需要同时处理多个参数,只需要扩展它的__init__参数列表就行,比如:
class ApplicationWindow(QtWidgets.QMainWindow): def __init__(self, fig, window_title="My Window"): super().__init__() self.fig = fig self.setWindowTitle(window_title) # 后续可以用self.fig做各种操作,比如把它嵌入到窗口里
内容的提问来源于stack exchange,提问作者user9535201
相关产品推荐
相关产品推荐

