2011-03-29 103 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