2011-03-29 37 views
3

我想將圖形視圖上的resize事件連接到使用PyQt的函數。我使用QtCreator將QGraphicsView添加到GUI。我已經嘗試了一些變化沒有成功:PyQt graphicsview調整大小事件

gv.pyqtConfigure(resize=self.printR) 

QtCore.QObject.connect(gv,QtCore.SIGNAL("resized()"),self.printR)   

gv.resize.connect(self.printR)    

但是沒有上述工作(我已經使用了事件名稱的許多變化試過)。

這樣做的正確方法是什麼?

作爲一個擴展的問題,Qt中是否有可用於不同窗口小部件的所有信號的確切列表,即可以傳遞給SIGNAL()的所有可能值或窗口小部件可用的「信號」屬性(例如button.clicked.connect())?

+0

如果這仍然是你感興趣的東西,請看我的答案[這裏](http://stackoverflow.com/a/36630691/2988730)。你可以做你想做的,但它需要一些額外的Python魔法。 – 2016-04-14 18:04:51

回答

8

PyQt class reference是尋找信號和類方法的最佳選擇。

連接簡單的信號可以做這樣的:

self.connect(senderObject, QtCore.SIGNAL("signalName()"), self.slotMethod) 

據我所知道的,但是,大多數的小部件通常不發出信號,他們被調整的時候。爲了做到這一點,你需要重新實現的QGraphicsView類及其resizeEvent方法,修改它發出這樣的信號,就像這樣:

from PyQt4.QtGui import QGraphicsView 
from PyQt4.QtCore import SIGNAL 

class customGraphicsView(QGraphicsView): 

    def __init__(self, parent=None): 
     QGraphicsView.__init__(self, parent) 

    def resizeEvent(self, evt=None): 
     self.emit(SIGNAL("resize()")) 

使用Qt Designer,您應該能夠把你的現有的QGraphicsView窗口小部件通過右鍵點擊它並選擇Promote to ...。尋求幫助,看看here

我希望這能夠充分回答你的問題。

+0

這很大程度上回答了問題 - 似乎連接到resize事件的唯一方法是使用派生類,如示例所示。我也不知道「促進」選項,這很有用,謝謝=) – aaa90210 2011-03-29 22:56:18

+0

你不需要繼承你正在連接的小部件:http://stackoverflow.com/a/36630691/2988730。 – 2016-04-14 18:06:51