2016-11-29 8 views
-1

私はアプリケーションインタフェースとしてPyQt4.QMainWindowを使用しています。マウスのx座標とy座標をQWidget内で取得し、それらを2つのtextBrowserで連続して設定したいとします。 MainWindow。QWidgetでPyQt4.QtGui.QMouseEventを使用する

QWidgetのドキュメントはhereです。

とQMouseEventのドキュメントはhereです。ここで

あなたは手動でなければならないので、それが唯一の次の溶液中で、そのウィジェットのではなく、あなたの子供に適用されますsetMouseTracking適用すると、コード

from PyQt4 import QtGui 
from PyQt4.QtGui import QApplication 
import sys 

class Ui_MainWindow(object): 
    def setupUI(self, MainWindow): 
     self.textBrowser_1 = QtGui.QTextBrowser(self.tab) 
     self.textBrowser_2 = QtGui.QTextBrowser(self.tab) 
     self.widget_1 = QtGui.QWidget(self.tab) 
     self.widget_1.setMouseTracking(True) 

class MyMainScreen(QMainWindow): 
def __init__(self, parent=None): 
    QtGui.QMainWindow.__init__(self, parent) 
    self.ui = Ui_MainWindow() # This is from a python export from QtDesigner 
    # There is a QWidget inside that is self.ui.widget_1 
    # and 2 textBrowsers, textBrowser_1 and textBrowser_2 
    # I want to populate these 2 textBrowsers with the current x,y 
    # coordinates. 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    mainscreen = MyMainScreen()   
    mainscreen.show() 
    app.exec_() 
+0

私の解決策を試してください – eyllanesc

+0

あなたはQtについてよく知らないようです。 MouseMoveEventは、マウスがウィジェット内を移動するたびにフレームワークから呼び出されるイベントコールバックです。これはおそらくあなたが持っているものですが、それを呼び出す代わりに(それは理にかなっていません)、おそらくそれをオーバーライドしてそこで独自のアクションを実装したいと考えています。 – Trilarion

+0

[PyQt4を使用すると、QMainWindowではQWidget内でのみ動作するようにmouseMoveEventを設定しますが、MainWindowでは動作させないようにするにはどうすればよいですか?(http://stackoverflow.com/questions/40878157/using-pyqt4-how-do -you-set-a-mousemoveevent-to-only-work-a-qwidget-in) –

答えて

1

です:

def setMouseTracking(self, flag): 
    def recursive_set(parent): 
     for child in parent.findChildren(QtCore.QObject): 
      try: 
       child.setMouseTracking(flag) 
      except: 
       pass 
      recursive_set(child) 
    QtGui.QWidget.setMouseTracking(self, flag) 
    recursive_set(self) 

完全なコード:これは私の出力である

from PyQt4 import QtCore 

from PyQt4 import QtGui 
from PyQt4.QtGui import QApplication, QMainWindow 
import sys 


class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
     MainWindow.resize(800, 132) 
     self.centralwidget = QtGui.QWidget(MainWindow) 
     self.horizontalLayout = QtGui.QHBoxLayout(self.centralwidget) 
     self.textBrowser_1 = QtGui.QTextBrowser(self.centralwidget) 
     self.horizontalLayout.addWidget(self.textBrowser_1) 
     self.textBrowser_2 = QtGui.QTextBrowser(self.centralwidget) 
     self.horizontalLayout.addWidget(self.textBrowser_2) 
     MainWindow.setCentralWidget(self.centralwidget) 
     self.menubar = QtGui.QMenuBar(MainWindow) 
     self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22)) 
     MainWindow.setMenuBar(self.menubar) 
     self.statusbar = QtGui.QStatusBar(MainWindow) 
     MainWindow.setStatusBar(self.statusbar) 
     QtCore.QMetaObject.connectSlotsByName(MainWindow) 


class MyMainScreen(QMainWindow): 
    def __init__(self, parent=None): 
     QtGui.QMainWindow.__init__(self, parent) 
     self.ui = Ui_MainWindow() # This is from a python export from QtDesigner 
     self.ui.setupUi(self) 
     self.setMouseTracking(True) 
     self.ui.textBrowser_1.setMouseTracking(True) 
     self.ui.textBrowser_2.setMouseTracking(True) 
     self.ui.menubar.setMouseTracking(True) 
     self.ui.statusbar.setMouseTracking(True) 

    def setMouseTracking(self, flag): 
     def recursive_set(parent): 
      for child in parent.findChildren(QtCore.QObject): 
       try: 
        child.setMouseTracking(flag) 
       except: 
        pass 
       recursive_set(child) 
     QtGui.QWidget.setMouseTracking(self, flag) 
     recursive_set(self) 

    def mouseMoveEvent(self, event): 
     pos = event.pos() 
     self.ui.textBrowser_1.append(str(pos.x())) 
     self.ui.textBrowser_2.append(str(pos.y())) 
     QtGui.QMainWindow.mouseMoveEvent(self, event) 

if __name__ == "__main__": 
    app = QApplication(sys.argv) 
    mainscreen = MyMainScreen() 
    mainscreen.show() 
    app.exec_() 

enter image description here

+0

コメントは議論の対象外です。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/129372/discussion-on-answer-by-eyllanesc-using-pyqt4-qtgui-qmouseevent-in-a-qwidget)。 –

関連する問題