[PATCH v2] py: cam: Convert to PyQt6

Laurent Pinchart laurent.pinchart at ideasonboard.com
Tue Aug 13 10:31:13 CEST 2024


Hi David,

On Tue, Aug 13, 2024 at 09:05:03AM +0100, David Plowman wrote:
> Hi everyone
> 
> Could I just put in a vote for maintaining backward compatibility with
> PyQt5 for the time being? By all means deprecate it, put in a warning,
> but please don't break it _yet_. There are many platforms still
> running PyQt5 (the latest Raspberry Pi OS based on Debian Bookworm has
> PyQt5), and we've found many people have had problems upgrading PyQt
> versions and then discovering OpenCV gets upset and doesn't work any
> more.

This is the exact kind of reason why I proposed supporting both PyQt5
and PyQt6 for the time being.

> We ship versions in apt that we guarantee work properly
> together, and I wouldn't like to tell people "sorry, you've got to
> find versions for yourself that play nicely, or build everything
> yourself from source. Only building some of this stuff can be
> non-trivial. Good luck."

Tomi, could you send a patch to restore PyQt5 support ?

David, please note that this will be best effort, until we start using
Qt features that differ between Qt5 and Qt6. I don't expect that to
happen soon though, there's little development done on the Qt backend of
cam.py at the moment.

> On Mon, 12 Aug 2024 at 18:27, Tomi Valkeinen wrote:
> >
> > Qt5 is now end of life. The libcamera 'qcam' application has removed
> > support for Qt5, and updated to Qt6.
> >
> > Update the python 'cam' application accordingly to Qt6.
> >
> > Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>
> > Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
> > Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > ---
> > v2:
> > - Added RB tags
> > - Updated the commit description
> >
> >  src/py/cam/cam_qt.py   |  6 +++---
> >  src/py/cam/cam_qtgl.py | 12 ++++++------
> >  2 files changed, 9 insertions(+), 9 deletions(-)
> >
> > diff --git a/src/py/cam/cam_qt.py b/src/py/cam/cam_qt.py
> > index c1723b44..22d8c4da 100644
> > --- a/src/py/cam/cam_qt.py
> > +++ b/src/py/cam/cam_qt.py
> > @@ -2,7 +2,7 @@
> >  # Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>
> >
> >  from helpers import mfb_to_rgb
> > -from PyQt5 import QtCore, QtGui, QtWidgets
> > +from PyQt6 import QtCore, QtGui, QtWidgets
> >  import libcamera as libcam
> >  import libcamera.utils
> >  import sys
> > @@ -63,10 +63,10 @@ class QtRenderer:
> >          self.buf_mmap_map = buf_mmap_map
> >
> >      def run(self):
> > -        camnotif = QtCore.QSocketNotifier(self.cm.event_fd, QtCore.QSocketNotifier.Read)
> > +        camnotif = QtCore.QSocketNotifier(self.cm.event_fd, QtCore.QSocketNotifier.Type.Read)
> >          camnotif.activated.connect(lambda _: self.readcam())
> >
> > -        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Read)
> > +        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Type.Read)
> >          keynotif.activated.connect(lambda _: self.readkey())
> >
> >          print('Capturing...')
> > diff --git a/src/py/cam/cam_qtgl.py b/src/py/cam/cam_qtgl.py
> > index 6cfbd347..35b4b06b 100644
> > --- a/src/py/cam/cam_qtgl.py
> > +++ b/src/py/cam/cam_qtgl.py
> > @@ -1,8 +1,8 @@
> >  # SPDX-License-Identifier: GPL-2.0-or-later
> >  # Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>
> >
> > -from PyQt5 import QtCore, QtWidgets
> > -from PyQt5.QtCore import Qt
> > +from PyQt6 import QtCore, QtWidgets
> > +from PyQt6.QtCore import Qt
> >
> >  import math
> >  import os
> > @@ -142,10 +142,10 @@ class QtRenderer:
> >          self.window = window
> >
> >      def run(self):
> > -        camnotif = QtCore.QSocketNotifier(self.state.cm.event_fd, QtCore.QSocketNotifier.Read)
> > +        camnotif = QtCore.QSocketNotifier(self.state.cm.event_fd, QtCore.QSocketNotifier.Type.Read)
> >          camnotif.activated.connect(lambda _: self.readcam())
> >
> > -        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Read)
> > +        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Type.Read)
> >          keynotif.activated.connect(lambda _: self.readkey())
> >
> >          print('Capturing...')
> > @@ -175,8 +175,8 @@ class MainWindow(QtWidgets.QWidget):
> >      def __init__(self, state):
> >          super().__init__()
> >
> > -        self.setAttribute(Qt.WA_PaintOnScreen)
> > -        self.setAttribute(Qt.WA_NativeWindow)
> > +        self.setAttribute(Qt.WidgetAttribute.WA_PaintOnScreen)
> > +        self.setAttribute(Qt.WidgetAttribute.WA_NativeWindow)
> >
> >          self.state = state
> >

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list