我使用QGraphicsView在PyQt中创建2D视图。不幸的是,我似乎无法找到任何方式让工具提示出现在任何级别 - 在QGraphicsItems,QGraphicsItemGroups等。
它已经到了他们非常有用的地步,但我尝试过:
我认为第二个是死亡证书,但似乎什么都不做......
答案 0 :(得分:2)
使用python Qt 4.8.7与PyQt 4.11.4:
似乎可以正常工作from PyQt4 import QtGui
class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
self.view = QtGui.QGraphicsView(self)
self.view.setScene(QtGui.QGraphicsScene(self))
for index, name in enumerate('One Two Three Four Five'.split()):
item = QtGui.QGraphicsRectItem(index * 60, index * 60, 50, 50)
item.setToolTip('Rectangle: ' + name)
self.view.scene().addItem(item)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.view)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.resize(400, 400)
window.show()
sys.exit(app.exec_())
据推测,您自己的代码中必定存在一些不同于正常行为的东西。但如果没有适当的测试用例,就无法确定。
答案 1 :(得分:1)
好的,感谢@ekhumoro提示我对问题采取更合理的方法,我已经确定了问题。
问题是由于继承结构,我过度热衷于减少代码重复。我已将它提炼成一个(非)工作示例,它看起来比原始代码更愚蠢(或者只是揭示了愚蠢):
from PyQt4 import QtGui
class MyRect(QtGui.QGraphicsRectItem, QtGui.QGraphicsItem):
def __init__(self, index):
QtGui.QGraphicsItem.__init__(self, )
self.setToolTip('Rectangle: '+str(index)) # <-- This doesn't work
QtGui.QGraphicsRectItem.__init__(self, index * 60, index * 60, 50, 50)
#self.setToolTip('Rectangle: '+str(index)) <-- This works
class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
self.view = QtGui.QGraphicsView(self)
self.view.setScene(QtGui.QGraphicsScene(self))
for index, name in enumerate('One Two Three Four Five'.split()):
item = MyRect(index)
#item.setToolTip('Rectangle: ' + name) # <-- This would work
self.view.scene().addItem(item)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.view)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.resize(400, 400)
window.show()
sys.exit(app.exec_())
最初的努力是尝试将所有的mundanities(例如设置工具提示和上下文菜单)提取到从QGraphicsItem继承的抽象类中。但是,这意味着您调用QGraphicsItem的构造函数两次,并且需要在构造函数的两个之后调用setToolTip。
毋庸置疑,我正在重构代码以删除QGraphicsItem的重复继承...