【发布时间】:2014-11-11 22:00:24
【问题描述】:
您好,我已经设法使用下面的代码将一些 qgraphicsitems 添加到 qgraphicsscene 中
def generate_graph_and_update_scene(self):
try:
local_params=locals() #for error log get local paramters
this_function_name=sys._getframe().f_code.co_name #for error log get function name
self.vertex_dict.clear()
self.clear() #clear graphicsscene
self.graph_pos.clear() #clear graph position holder object
#function that generates the node data
root_nodes=my_database_query.get_nodes_information()
for node in root_nodes:
# add nodes to nx.graph object
self.nx_graph.add_node(node['column1'])
# create networkx graph
self.graph_pos = nx.spring_layout(self.nx_graph, iterations=25,scale=10)
for node in self.nx_graph.nodes(): # Add nodes to qgraphicsscene
v=default_nodeobject.my_ellipse(node,self.graph_pos)
self.addItem(v) # Add ellipse to qgraphics scene
for edge in self.nx_graph.edges():
self.addItem(defaultedgeview.edgeview(edge[0], edge[1],self.graph_pos))#add edges to qgraphicscene
except:
#Exception handler
message=str(sys.exc_info())
message=message + str(local_params)+" "+ str(this_function_name)
print message
这允许我向我的 qgraphics 场景添加 600 个“节点”,但是当我清除场景并添加另一个说 1500 个节点时,添加项目会阻塞 UI 并且我的整个应用程序会冻结几秒钟。 此外,每当我在执行诸如循环图形项之类的操作时说寻找具有特定属性的节点时,主线程在我循环时再次冻结,
在对场景中的 grpahicsscene/项目进行处理时,任何人都可以提出一种保持 UI 响应的好方法。 理想情况下,即使我有几千个项目显示,也希望对场景进行流畅、无阻塞的更新。
【问题讨论】:
-
多线程 ... 在另一个线程中创建节点并在主线程中将它们添加到 UI .. 这是必要的,因为只有主线程可以更新场景 .. 从不同的线程这样做会导致错误
标签: qt python-2.7 qt4 pyqt4 qgraphicsscene