Python类之间数据传递,pyQT5实战

项目场景:

在写一个pyQT5界面时,遇到一个需求:点击一个按钮 弹出一个新的窗口 实现将一个文件夹(该文件夹地址 在第一个类中已获得)内的全部CT图片进行3D重建


解决方案:

通过使用类和传值函数进行数据的传递

在发送文件地址的类中 新建 D_display(self): 函数

    # 3D展示按钮对应的槽函数
    def D_display(self):
    	# 通过MayaviQWidget类中的__init__函数 将dir_传入了传入类变量
        self.w4 = MayaviQWidget(self.dir_data, self.dir_mark, self.dir_system)  
        self.w4.show()

在等待接收文件地址的类中新建一个 self.m_strPath 类对象,并将读取到的文件地址存入 self.m_strPath

# 3D展示.The QWidget containing the visualization, this is pure PyQt4 code.
class MayaviQWidget(QWidget):
    def __init__(self,dir_data="",dir_mark="",dir_system="", parent=None):
        super().__init__()
        self.resize(1600, 800)
        self.setWindowTitle('三维效果展示')
        self.setWindowIcon(QtGui.QIcon("./res/icon/pie-chart.svg"))

        # 将实例化MayaviQWidget类时传入的数据 赋予类变量
        self.string_data = dir_data
        self.string_mark = dir_mark
        self.string_system = dir_system

        layout = QHBoxLayout(self)
        layout.setContentsMargins(0, 0, 0, 0)
        layout.setSpacing(0)

        self.visualization1 = Visualization1() # 呈现函数
        self.visualization1.getStrPath(self.string_data)

至此文件地址就成功传递到了 MayaviQWidget 类中,同时最后两行 又将该文件地址传递给 Visualization1()

Visualization1() 类中新建getStrPath(self, string):函数 对传入数据进行接收

class Visualization1(HasTraits):
    # 建立MlabSceneModel场景实例scene
    scene_a = Instance(MlabSceneModel, ())
    opacity_a = Range(0., 1., 0.1,)
    
    # 通过公有函数赋值
    def getStrPath(self, string):
        self.m_strPath = string
        # print("self.m_strPath:", self.m_strPath)

    @on_trait_change('scene_a.activated')
    def update_plot(self):
        # This function is called when the view is opened. We don't
        # populate the scene when the view is not yet open, as some
        # VTK features require a GLContext.
        # We can do normal mlab calls on the embedded scene.

        # self.scene.mlab.pipeline.surface(self.scene.mlab.pipeline.open("cylinder.vtk"))
        # self.scene.mlab.test_points3d()
        path = self.m_strPath

注意传入地址中不能含有中文
注意要先激活scene,同时不能有__init__函数(如果有 update_plot函数不会运行)
Python类之间数据传递,pyQT5实战_第1张图片

你可能感兴趣的:(python,qt,开发语言)