python - 在 Pyqt5 中的 QLabel 上设置调整大小事件
问题描述
我无法为自定义 QT 类创建有效的调整大小事件。
我的 GUI 的一部分是视频播放器。如果我正在调整 GUI 的大小,我希望视频播放器停止播放视频。从论坛中,我了解到这样做的方法是创建自定义 QLabel 并编辑其调整大小事件。
我尝试使用 resizeEvent 函数和 eventFilter 函数来做到这一点,但未能使其正常工作。
我的第一个选择是重新设计 resizeEvent。不幸的是,当我调整窗口大小时,resizeEvent 会不断触发,所以我陷入了“Inside resizeEvent”的无限打印输出
class VideoPlayer(QtWidgets.QLabel):
ResizeSignal = QtCore.pyqtSignal(int)
def __init__(self):
super().__init__()
self.setSizePolicy(QtWidgets.QSizePolicy.Ignored,
QtWidgets.QSizePolicy.Ignored)
self.resize(800, 450)
self.setFrameShape(QtWidgets.QFrame.Box)
self.setLineWidth(3)
self.setText("")
self.pix = QPixmap()
self.setPixmap(self.pix)
def resizeEvent(self, event):
if not self.pix.isNull():
print(' Inside resizeEvent')
self.ResizeSignal.emit(1) # Signal emitted when Qlabel is resized.
pixmap = self.pix.scaled(self.width(), self.height(),Qt.KeepAspectRatio)
self.setPixmap(pixmap)
self.resize(pixmap.width(), pixmap.height())
我的另一个选择是尝试执行 eventFilter 选项。我注释掉了 resizeEvent 并将这个函数添加到了 VideoPlayer 类中。但是,当我调整大小时,这根本不会触发。
def eventFilter(self, event):
if (event.type() == QtCore.QEvent.Resize):
print( 'Inside event Filter')
self.ResizeSignal.emit(1)
return True
我想学习如何正确地做到这一点:) 谢谢!
解决方案
感谢@eyllanesc,我能够回答问题的第 2 部分。
将eventFilter
功能更改为此
def eventFilter(self, obj, event):
if (event.type() == QtCore.QEvent.Resize):
print( 'Inside event Filter')
return super().eventFilter(obj, event)
并添加self.installEventFilter(self)
到__init__
, 成功了。
仍在试图弄清楚为什么resizeEvent
不断被触发。
推荐阅读
- git - 如何将特定文件中添加的最后提交代码添加到另一个临时文件
- apache - 如果与默认值不同,同时定义了 http 和 https 端口,Apache HTTPS 端口不会更改
- javascript - 如何比较上传文件的长度并检查其是否相同
- azure-sql-database - 如何在 Comos v4 同步 api container.queryItems() 中获取 eTag 值
- python - Python Cisco IOS ACL比较输出到变量
- google-chrome-extension - 如何在没有存储 API 的情况下将状态存储在 Manifest 3 扩展中?
- python - 处理不平衡的类 SMOTE,仍然没有得到很好的结果
- git - 如何在所有分支上触发 Jenkins 中的 github-webhook
- vb.net - 我正在尝试使用 vb 20017 中的 webbrowser1 获取 javascript 中变量的值。我无法让我的浏览器识别该函数
- machine-learning - 训练数据集和测试数据集可以分开而不是拆分吗