[PyQt] Resize flicking on QMainWindow centralWidget in python but not C++

Eric Pettersen pett at cgl.ucsf.edu
Mon Oct 7 19:10:47 BST 2019


We had this behavior in our own app, but it kind of went away on its own.  We came to suspect that it had to with the setting of MACOSX_DEPLOYMENT_TARGET.  I don’t know if you set that variable in your compile, but if you do you might try changing it (or not setting it) and see what happens.

—Eric

> On Oct 6, 2019, at 1:38 PM, Patrick Stinson <patrickkidd at gmail.com> wrote:
> 
> I wonder if maybe the use of QQuickWidget child widgets enables some kind of OpenGL buffer in the QMainWindoe?
> 
>> On Oct 6, 2019, at 12:25 AM, Patrick Stinson <patrickkidd at gmail.com> wrote:
>> 
>> I put a qDebug() line in QMainWindow() and QOpenGLWidget(), rebuilt/installed Qt, and ran my app. I saw the line for the QMainWindow() but not QOpenGLWidget(), so that means QOpenGLWidget isn’t being run in my app. But I am still seeing the problem. Difficult to pinpoint as a reproducible report.
>> 
>>> On Oct 5, 2019, at 10:25 PM, Patrick Stinson <patrickkidd at gmail.com <mailto:patrickkidd at gmail.com>> wrote:
>>> 
>>> So it does, and changing that makes it work like the C++ example.
>>> 
>>> My own app is still showing the problem even without using QOpenGLWidget. I wonder if there is some setting somewhere that implicitly uses QOpenGLWidget….
>>> 
>>>> On Oct 5, 2019, at 5:36 PM, Eric Pettersen <pett at cgl.ucsf.edu <mailto:pett at cgl.ucsf.edu>> wrote:
>>>> 
>>>> Your Python class inherits from QOpenGLWidget.  Your C++ class inherits from QWidget.
>>>> 
>>>>> On Oct 5, 2019, at 2:10 PM, Patrick Stinson <patrickkidd at gmail.com <mailto:patrickkidd at gmail.com>> wrote:
>>>>> 
>>>>> Hello,
>>>>> 
>>>>> On MacOS, a QMainWindow with a simple painted centralWidget flickers when resizing quickly in python but not in C++. This only occurs with QMainWindow It is particularly pronounced more complex widgets, as shown in the following video:
>>>>> 
>>>>> https://youtu.be/0Qjy2wm6m9M <https://youtu.be/0Qjy2wm6m9M>
>>>>> 
>>>>> Here is the python example that shows the bug. Just run, rapidly resize the height of the widget , and observe a black flickering on the top edge of the widget as the height changes.
>>>>> 
>>>>> class Widget(QOpenGLWidget):
>>>>>     def paintEvent(self, e):
>>>>>         p = QPainter(self)
>>>>>         p.setBrush(Qt.red)
>>>>>         p.drawRect(self.rect())
>>>>> 
>>>>> app = QApplication(sys.argv)
>>>>> mw = QMainWindow()
>>>>> w = Widget()
>>>>> mw.setCentralWidget(w)
>>>>> mw.show()
>>>>> w.show()
>>>>> app.exec()
>>>>> 
>>>>> 
>>>>> The following 1-to-1 C++ translation shows no such behavior:
>>>>> 
>>>>> 
>>>>> #include <QApplication>
>>>>> #include <QMainWindow>
>>>>> #include <QWidget>
>>>>> #include <QPainter>
>>>>> 
>>>>> class Widget : public QWidget {
>>>>> public:
>>>>>     void paintEvent(QPaintEvent *) {
>>>>>         QPainter p(this);
>>>>>         p.setBrush(Qt::red);
>>>>>         p.drawRect(rect());
>>>>>     }
>>>>> };
>>>>> 
>>>>> int main(int argc, char *argv[])
>>>>> {
>>>>>     QApplication a(argc, argv);
>>>>>     QMainWindow mw;
>>>>>     QWidget *w = new Widget;
>>>>>     mw.setCentralWidget(w);
>>>>>     mw.show();
>>>>>     return a.exec();
>>>>> }
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> PyQt mailing list    PyQt at riverbankcomputing.com <mailto:PyQt at riverbankcomputing.com>
>>>>> https://www.riverbankcomputing.com/mailman/listinfo/pyqt <https://www.riverbankcomputing.com/mailman/listinfo/pyqt>
>>>> 
>>> 
>> 
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> https://www.riverbankcomputing.com/mailman/listinfo/pyqt

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.riverbankcomputing.com/pipermail/pyqt/attachments/20191007/fb908a9f/attachment-0001.html>


More information about the PyQt mailing list