У меня есть приложение QT, написанное на Python с использованием PySide, и я наткнулся на небольшую проблему, касающуюся метода showFullScreen QGLWidget (хотя проблема возникает и с любым другим виджетом):
Проблема в том, что виджет не имеет своего «окончательного» разрешения после того, как программа вернется из 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_()