QGraphicsViewを使用してPyQtで2Dビューを作成しています。残念ながら、QGraphicsItems、QGraphicsItemGroupsなどのどのレベルでもツールチップを表示する方法がないようです。Qt QGraphicsView - ツールチップが表示されない
これは非常に便利な点ですが、私は試しました:
- setToolTip()を使用してツールチップを設定します。 QGraphicsView
に、私はこれが動作しているようです
QGraphicsViewを使用してPyQtで2Dビューを作成しています。残念ながら、QGraphicsItems、QGraphicsItemGroupsなどのどのレベルでもツールチップを表示する方法がないようです。Qt QGraphicsView - ツールチップが表示されない
これは非常に便利な点ですが、私は試しました:
に、私はこれが動作しているようです
...死ん-CERTだろうと思ったが、全く何もしないように見える秒のsetAttribute(QtCore.Qt.WA_AlwaysShowToolTips)を使用して
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_())
おそらく、正常な動作を損なうされ、独自のコードで別の何かがなければなりません。しかし、それは適切なテストケースなしでは特定できません。
[OK]をクリックすると、問題へのより論理的なアプローチを促す@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_())
オリジナルの努力はすべてを抽出しようとしましたQGraphicsItemを継承する抽象クラスにツールヒントやコンテキストメニューを設定するなどのmundanitiesがあります。しかし、これはQGraphicsItemのコンストラクタを2回呼び出したことを意味し、setToolTipはの後にコンストラクタのの両方で呼び出す必要があります。
、私はQGraphicsItemの重複継承を削除するためのコードをリファクタリングしてい言うまでもなく...
おかげで、@ekhumoro - あなたの素敵な簡単なテストケースは確かに私のために働くんので、それは私がやっているものです*どこか*。私はそれが何であるかを一度投稿します(それは明らかではありません - 私はあなたが上で行ったことを(本質的に)行っていると信じています)... –