我最近开始编程python,并编写了第一个GUI,用于使用PyQt对NMR数据进行后处理和评估。应用程序的当前版本如下所示:
典型的工作流程是:
4d图像堆栈与实验设置、图像重建设置、拟合结果等一起存储为我自己的MriData类的类对象:
class MriData:
def __init__(self, path='', exp_num=0, exp_name=''):
self.path = path
self.exp_num = exp_num
self.exp_name = exp_name
self.img_stack = np.array([])
self.ROIs = [] # list of ROIs
self.settings= {}
self.lmfit = {}
...
目前,我的主窗口有一个类型为list的“mri_data”属性,在这里我存储了所有的数据/类对象。如果我在左侧的QTreeWidget中选择(多个)实验和/或ROI,我总是检查该项目是否是顶级项目,获取该实验的索引(如果是ROI的索引),然后在“mri_data”列表中访问相应的列表项:
^{pr2}$这是可行的,但显然不是很好,我很确定它是非常低效的。这就是我写这篇文章的原因。我读到我可以在QTreeWidgetItems中存储数据,但是在重写整个代码之前,我想问问专家这是不是个好主意。如果存储的数据非常大,我就找不到任何关于性能的信息(4d堆栈高达256x256x32x2500,而我同时在QTreeWidget中进行了数百次实验)。或者使用完全不同的数据库方法更好?不幸的是(至少对我来说)很难找到关于类似问题的教程或帖子。。。也许是因为我用错了关键词?!在
提前感谢您的回答/提示/链接等
我测试了我在
QTreeWidgetItems
中存储数据的实现已经很长时间了,至少在我的例子中,它工作得很有魅力。例如,添加新项目非常舒适:不过,对我来说,最好的方法是使用
^{pr2}$QDataStream
来保存/加载工作区:这是相应的加载函数(我希望它能工作;我的保存/加载函数实际上更高级):
我仍然不确定这是否是最有效的方法,但至少对于我的应用程序,我没有遇到任何性能问题等
相关问题 更多 >
编程相关推荐