0
在下面這個節目,我測試mousePressEvent的影響:如何避免mousePressEvent - 左邊點擊呼叫的paintEvent在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被調用,並在框架中的每個圖紙仍然完好。原因是因爲在我的真實程序中,paintEvent非常重,我希望儘可能少運行它。
如果這是不可能的,有沒有辦法避免框架獲得焦點時,左鍵單擊它?
是的,油漆可以發生在焦點改變(而不是實際的點擊)。顯而易見的事情是有一個scene_was_changed標誌,說明是否實際需要重繪。要真正改變paintEvent的調用,你可以攔截focusIn和focusOut事件。 – mdurant 2014-09-25 19:22:29
如果你想拒絕事件,那麼你可以使用event.ignore() – Achayan 2014-09-25 20:04:53