You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:52:10