在写一个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函数不会运行)