PyQt QGraphicsItem 中既要绘制一个图形(例如一个园), 又要在图形内部有文字的显示, 有些什么样的实现方法?

2012-04-16 17:09:28 +08:00
 thedevil7
我想到了一种方法就是向这个 Item 添加子 TextItem.
5923 次点击
所在节点    Python
10 条回复
mlzboy
2012-04-16 19:39:45 +08:00
我追着问一下,qt和pyqt的差异在哪,刚开始学QT还没有入门呢,求求指点
thedevil7
2012-04-16 22:02:59 +08:00
@mlzboy qt 是 C++ 的库. PyQt 是 python 的绑定库. 和 Qt 内容上好像没有差别. 我现在很多资料也是看 PyQt 自带的 assistant 的文档, 虽然是针对 C++ 写的. 但是 Python 也能用.
reus
2012-04-17 11:06:55 +08:00
只是显示可以直接在paint里画,如果需要更多交互就加子item
thedevil7
2012-04-17 11:36:19 +08:00
@reus 多谢, 现在我添加了子 item, 然后设置了字体, 这样就能够在图形内部显示字体, 而且又可以控制大小. 现在又出了一个新问题.. 我有动作需要连接槽, 但是槽时 python 的函数, 需要指定参数. 如果直接写 self.connect(action, SIGNAL(signal), function(arg1,arg2,arg3)), 这个函数就会立即被调用.. 正在找有没有不调用的方法.
thedevil7
2012-04-17 19:03:27 +08:00
问题解决咯~~~ 在 QMenu 里面重新写了一个函数.
reus
2012-04-17 23:21:19 +08:00
@thedevil7 可以写成 self.connect(action, SIGNAL(signal), lambda: function(arg1, arg2, arg3))
thedevil7
2012-04-17 23:32:48 +08:00
@reus 多谢, 现在的问题变成了, 我有一个 Item 由菜单中的对 Item 代表的数据有改变, 而且会影响其他的 Item, 现在需要对所有 Item 进行更新重新判断位置并且重画.
我想到的是, Menu.exec() 之后利用传入的 scene 执行所有 Item 的 update() 函数. 但是没有效果.
Python 新手... PyQT 新手...
reus
2012-04-17 23:53:20 +08:00
@thedevil7 https://gist.github.com/2406975 可以看下这个例子里的GraphWidget里的timerEvent方法,就是定时更新所有item的。这是pyqt源码的examples/graphicsview目录里面的
其实就是把boundingRect和paint写对就行了,这两个方法需要一些比如位置之类的信息,所以就需要另一些方法来更新这些信息。注意如果item的boundingRect改变了的话,需要调用prepareGeometryChange
thedevil7
2012-04-18 00:40:17 +08:00
@reus 谢谢, 真的很感谢你.帮了我好多问题, 呵呵. 晚安, 明早继续奋战 Qt~
thedevil7
2012-04-18 11:26:44 +08:00
@reus 搞定了, 利用了 timerEvent 的方法重新设置了 item 的位置, 然后再用 scene 的 update() 函数对图形进行了重绘(数据有不同状态, 需要不同颜色表示).

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/32385

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX