2017-04-17 77 views
0

源代碼中有兩種方法必須在它們之間進行交互。mousePressEvent和paintEvent方法之間的交互

第一種方法是:

def mousePressEvent(self, event): 
    if event.button() == QtCore.Qt.LeftButton: 
     event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress, event.pos(), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier) 
     centerX = event.pos().x() 
     centerY = event.pos().y() 
     QtWidgets.QMainWindow.mousePressEvent(self, event) 

,第二種方法是:

def paintEvent(self, event): 
    painter = QtGui.QPainter(self) 
    painter.setPen(QtCore.Qt.red) 
    painter.drawEllipse(centerX, centerY, 110, 110) 
    QtWidgets.QMainWindow.paintEvent(self, event) 

本方案的意義是:當我按通過鼠標左鍵主窗口上的圓必須出現。

首先我按下鼠標左鍵因此QMouseEvent發生然後QPaintEvent出現。

,從我不知道在哪裏調用的paintEvent()方法必須位於mousePressEvent內的()方法,因此這個計劃行不通。

當嘗試插入調用的paintEvent()方法的內部mousePressEvent()方法我接收到錯誤消息。

請告訴我,當我必須插入調用內部mousePressEvent()方法的paintEvent()方法?

謝謝!

祝你好運!

回答

0

您必須使用update(),此方法調用paintEvent函數。另外,變量centerXcenterY必須是該類的屬性,但更好的選擇是將該位置用作輸入(self.center)並驗證它是否已被使用。

代碼:

from PyQt5 import QtWidgets, QtGui, QtCore 

class MainWindow(QtWidgets.QMainWindow): 
    def __init__(self, parent=None): 
     super(MainWindow, self).__init__(parent=parent) 
     self.center = None 

    def mousePressEvent(self, event): 
     if event.button() == QtCore.Qt.LeftButton: 
      event = QtGui.QMouseEvent(QtCore.QEvent.MouseButtonPress, event.pos(), QtCore.Qt.LeftButton, QtCore.Qt.LeftButton, QtCore.Qt.NoModifier) 
      self.center = event.pos() 
      self.update() 
      QtWidgets.QMainWindow.mousePressEvent(self, event) 

    def paintEvent(self, event): 
     if self.center: 
      painter = QtGui.QPainter(self) 
      painter.setPen(QtCore.Qt.red) 
      painter.drawEllipse(self.center, 110, 110) 
     QtWidgets.QMainWindow.paintEvent(self, event) 


import sys 
app = QtWidgets.QApplication(sys.argv) 
w = MainWindow() 
w.show() 
sys.exit(app.exec_()) 
+0

謝謝@eyllanesc的答案。 –

+0

你工作我的答案? – eyllanesc

+0

是的,我做到了。我在'mousePressEvent()'方法體內插入了'self.update()'字符串,它是在''if event.button()== QtCore.Qt.LeftButton'字符串之後執行'QMainWindow'更新直接在鼠標左鍵點擊之後。謝謝你,@ eyllanesc。 - –

相關問題