[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