python - QWidget showFullScreen 产生多个resizeEvents

标签 python qt fullscreen pyside qglwidget

我有一个使用 PySide 用 python 编写的 QT 应用程序,我偶然发现了一个关于 QGLWidget 的 showFullScreen 方法的小问题(尽管其他所有小部件也会出现这个问题):

问题是,在程序从 showFullScreen 返回后,小部件没有其“最终”分辨率。 开关似乎在 5 到 10 毫秒后异步触发。

这对我来说是个问题,因为我必须根据小部件显示后的大小进行一些布局计算。

下面是一个小的复制器,它是 QGLWidget 的子类。使用此复制器您会注意到,resizeEvent 将在 showFullScreen 之后调用两次。

我正在寻找一种方便的方式来了解哪个 resizeEvent 是“最终”事件,或者一种了解小部件何时真正处于全屏模式的方式。有没有我可以连接到的信号?

非常感谢您对此提供的任何帮助。

#!/usr/bin/python

import sys
from PySide.QtGui import QApplication
from PySide.QtCore import QTimer
from PySide.QtOpenGL import QGLWidget

class TestWidget(QGLWidget):
    def __init__(self, parent=None):
        super(TestWidget, self).__init__(parent)
        self._timer = QTimer()
        self._timer.setInterval(5)
        self._timer.timeout.connect(self.showsize)
        self._timer.start()

    def resizeEvent(self, event):
        print "Resize event:", event.size().width(), event.size().height()

    def showsize(self):
        w = widget.size().width()
        print "Timer: ", w, widget.size().height()
        if w == 1680:
           self._timer.stop()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = TestWidget()
    widget.showFullScreen()
    print "After showFullScreen:", widget.size().width(), widget.size().height()
    # this will always be 640 480...1680 1050 is what I'm expecting
    app.exec_()

最佳答案

一种可能性是检查调整大小事件是否为 spontaneous或不。从这里的有限测试(在 Linux 上使用 Qt C++)来看,第二个调整大小事件是自发的,而第一个不是。

只有当事件是自发的时,您才能进行计算。

注意:我不确定它的便携性如何,它可能取决于您的窗口管理器/窗口系统。

关于python - QWidget showFullScreen 产生多个resizeEvents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8287118/

相关文章:

qt - ffmpeg 的链接器错误

c++ - 'QObject::QObject(const QObject&)' 是私有(private)的

javascript - 如何使用 jQuery 在全屏模式下打开新页面而不刷新

python - 键盘中断线程

c++ - Qt - "No such slot",虽然有

python - 如何在Python中对字符串进行引号

javascript - 如何使用 document.msFullscreenElement !== null(使用 javascript)检测全屏

ios - 当 AVPlayerViewController 进入全屏时处理

python - 你能给我解释一下这个递归的 "n choose k"代码吗?

python - 为什么 ffmpeg-python 会在这里抛出编解码器错误?