2011-10-19 87 views
1

我可能会对此都错了,但...将字符串转换一个对象实例名称 - 蟒蛇

我试图从SQL数据填充QTreeView则 - 使用化QAbstractItemModel(并具有带来很大的麻烦了解它tbh)。我遵循的一个教程(最简单的)通过简单地调用“节点”的新实例并从列表中生成模型来填充树。节点有一个名字和一个父节点(如下)。您可以在程序中生成数据。这我可以只是关注:)

但是,我想从表中的数据并使用字符串来标识正确的父节点 - 主要是因为如果我迭代记录我将无法使用单独的变量(?)命名每个变量。它将用于recs中的x:node = Node(“name”,parentnode)。

当我这样做时,我得到了一个明显的错误信息,即字符串不是正确的对象,也没有方法。有没有一种方法可以使用从我的表派生的字符串来识别正确的'父'对象(或者,或者有人指向我为非常热情,但不是必要的天才学习者设计的非常基本的Qtreeview模型教程的方向) 。

rootNode = Node("Hips") 
childNode0 = TransformNode("RightPirateLeg",  rootNode) 
childNode1 = Node("RightPirateLeg_END", childNode0) 
childNode2 = CameraNode("LeftFemur",    rootNode) 
childNode3 = Node("LeftTibia",    childNode2) 
childNode4 = Node("LeftFoot",    childNode3) 
childNode5 = LightNode("LeftFoot_END",   childNode4) 

我意识到我可能在跑步之前跑步,并为我的无知事先道歉。

回答

2

字符串是全局变量的名字吗?如果是这样,你可以用globals()['name']访问由全局变量refenced值,(当然是变量的字符串名称替换'name'

或者,更好的,而不是在你的全局命名空间 乱抛垃圾的变量名你可以使用一个dict

node={} 
node['rootNode']=Node('Hips') 
node['childNode0']=TransformNode('RightPirateLeg',node['rootNode']) 
... 

这使得它非常容易的字符串名称和值之间进行映射。

+0

尝试它,似乎像一个魅力工作:)非常感谢。 –

+0

我希望你选择了第二个建议。具有索引的变量始终表示您应该使用容器数据类型,如列表或“dict”。 @unutbu -1用于提出丑陋的'globals'东西,这根本不是pythonic ... – schlamar

+0

是 - 选项2. –

相关问题