【发布时间】:2014-09-25 16:27:37
【问题描述】:
在下面这个程序中,我正在测试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 真的很重,我想尽可能少地运行它。
如果这不可能,有没有办法避免在左键单击时框架获得焦点?
【问题讨论】:
-
是的,当焦点改变(而不是实际的点击)时,绘画可能会发生。显而易见的事情是有一个 scene_was_changed 标志来说明是否真的需要重绘。要真正改变paintEvent的调用,你可以拦截focusIn和focusOut事件。
-
如果你想拒绝事件,那么你可以使用 event.ignore()
标签: pyqt focus paintevent mousepress