在下面的这个程序中,我正在测试 mousePressEvent 的影响:
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 并且框架中的每幅画都完好无损。原因是因为在我的实际程序中,paintEvent 真的很重,我想尽可能少地运行它。
如果这是不可能的,有没有办法在左键单击时避免框架获得焦点?