2016-03-23 19 views
1

QGraphicsViewを使用してPyQtで2Dビューを作成しています。残念ながら、QGraphicsItems、QGraphicsItemGroupsなどのどのレベルでもツールチップを表示する方法がないようです。Qt QGraphicsView - ツールチップが表示されない

これは非常に便利な点ですが、私は試しました:

  1. setToolTip()を使用してツールチップを設定します。 QGraphicsView

に、私はこれが動作しているようです

答えて

2

...死ん-CERTだろうと思ったが、全く何もしないように見える秒のsetAttribute(QtCore.Qt.WA_AlwaysShowToolTips)を使用して

  • PyQtは4.11.4でのpythonのQt 4.8.7を使用して期待通り:

    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_()) 
    

    おそらく、正常な動作を損なうされ、独自のコードで別の何かがなければなりません。しかし、それは適切なテストケースなしでは特定できません。

  • +0

    おかげで、@ekhumoro - あなたの素敵な簡単なテストケースは確かに私のために働くんので、それは私がやっているものです*どこか*。私はそれが何であるかを一度投稿します(それは明らかではありません - 私はあなたが上で行ったことを(本質的に)行っていると信じています)... –

    1

    [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の重複継承を削除するためのコードをリファクタリングしてい言うまでもなく...

    関連する問題