даже при минимальной настройке.
Среда:
- PySide6 (проверено с 6.5/6.6)
- Python 3.x
- ОС: Linux/Windows (происходит на нескольких системы)
- Драйверы графического процессора: стандартные системные драйверы
Минимальный воспроизводимый пример:
Код: Выделить всё
import sys
from PySide6.QtWidgets import (
QApplication, QMainWindow, QWidget, QVBoxLayout
)
from PySide6.QtOpenGLWidgets import QOpenGLWidget
from PySide6.QtGui import QSurfaceFormat
from PySide6.QtCore import Qt
class GLWidget(QOpenGLWidget):
def initializeGL(self):
pass
def resizeGL(self, w, h):
pass
def paintGL(self):
# No dibujamos nada a propósito
pass
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
central = QWidget()
layout = QVBoxLayout(central)
self.gl = GLWidget()
layout.addWidget(self.gl)
self.setCentralWidget(central)
self.resize(800, 600)
if __name__ == "__main__":
app = QApplication(sys.argv)
# Explicit OpenGL format
fmt = QSurfaceFormat()
fmt.setRenderableType(QSurfaceFormat.OpenGL)
fmt.setProfile(QSurfaceFormat.CoreProfile)
fmt.setVersion(3, 3)
fmt.setSwapBehavior(QSurfaceFormat.DoubleBuffer)
QSurfaceFormat.setDefaultFormat(fmt)
w = MainWindow()
w.show()
sys.exit(app.exec())
- QMainWindow
- Центральный QWidget с QVBoxLayout
- Один QOpenGLWidget
- Никаких таймеров
- Никакого рисования OpenGL вообще
Несмотря на это, окно мерцает, когда изменение размера или иногда даже в режиме ожидания.
Что я пробовал:
- Явный QSurfaceFormat с двойной буферизацией
- Основной профиль OpenGL
- Отключение обновлений
- Никаких вызовов repaint() / update()
Мой вопрос:
Каков правильный или рекомендуемый способ встраивания QOpenGLWidget в макете
использует PySide6 без мерцания?
Известна ли это проблема с QOpenGLWidget, привязками PySide6 или некоторыми оконными системами (X11 / Wayland / Windows)?
Будем признательны за любые рекомендации или минимальную рабочую настройку.>
Подробнее здесь: https://stackoverflow.com/questions/798 ... e-a-layout
Мобильная версия