에 paintEvent를 호출합니다 왼쪽, 나는이 mousePressEvent의 영향을 테스트입니다 :mousePressEvent를 방지하는 방법 - 아래이 프로그램에서 PyQt는
import sys
from PyQt4 import QtGui, Qt, QtCore
class Test(QtGui.QFrame):
def __init__(self):
QtGui.QFrame.__init__(self)
self.setGeometry(30,30,500, 500)
self.show()
def paintEvent(self, e=None):
print "paintEvent"
qp = QtGui.QPainter()
qp.begin(self)
qp.drawRect(30,30,80,80)
qp.end()
def mousePressEvent(self, event):
if event.button() == QtCore.Qt.RightButton:
print "mousePressEvent- Right"
else:
print "mousePressEvent- Left"
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
ex = Test()
sys.exit(app.exec_())
는 내가 보는 첫 번째 마우스 왼쪽 버튼으로 클릭, 프레임의 paintEvent가 호출에 그 . 이것은 프레임이 포커스를 얻었을 때 다시 그려야하기 때문입니다. 어떤 방법이 있다면 페인트 이벤트를 피하고 프레임의 모든 그림은 그대로입니다. 그 이유는 내 실제 프로그램에서 paintEvent가 너무 무거워서 가능한 한 적은 시간에 실행하려고하기 때문입니다.
그럴 수 없다면 왼쪽 버튼을 클릭 할 때 초점이 맞지 않게하는 방법이 있습니까?
예, 포커스가 변경된 경우 (실제 클릭이 아닌 경우) 페인트가 발생할 수 있습니다. 분명한 사실은 다시 그리기가 실제로 필요한지 아닌지를 나타내는 scene_was_changed 플래그를 갖는 것입니다. 실제로 paintEvent의 호출을 변경하려면 focusIn 및 focusOut 이벤트를 가로 챌 수 있습니다. – mdurant
이벤트를 거부하려면 event.ignore()를 사용하십시오. – Achayan