【问题标题】:PyQt graphicsview resize eventPyQt graphicsview 调整大小事件
【发布时间】:2011-07-24 22:34:28
【问题描述】:

我想将图形视图上的调整大小事件连接到使用 PyQt 的函数。我使用 QtCreator 将 QGraphicsView 添加到 GUI。我尝试了一些变体但没有成功:

gv.pyqtConfigure(resize=self.printR)

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

gv.resize.connect(self.printR)              

但是上述方法都不起作用(我尝试过使用事件名称的许多变体)。

这样做的正确方法是什么?

作为一个扩展的问题,Qt 中不同小部件可用的所有信号是否有明确的列表,即可以传递给 SIGNAL() 的所有可能值,或小部件可用的“信号”属性 (例如 button.clicked.connect())?

【问题讨论】:

  • 如果这还是你感兴趣的,请看我的回答here。你可以做你想做的事,但这需要一些额外的 Python 魔法。

标签: events qt pyqt signals


【解决方案1】:

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

我希望这足以回答您的问题。

【讨论】:

  • 这在很大程度上回答了这个问题 - 似乎连接到调整大小事件的唯一方法是使用您的示例所示的派生类。我也不知道“提升到”选项,这很有用,谢谢 =)
  • 您不需要对您要连接的小部件进行子类化:stackoverflow.com/a/36630691/2988730
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 2017-11-14
  • 1970-01-01
  • 2011-01-13
  • 2019-02-01
  • 2022-10-01
相关资源
最近更新 更多