[PATCH] py: cam: Convert to PyQt6

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Aug 12 18:10:52 CEST 2024


Hi Tomi,

Thank you for the patch.

On Mon, Aug 12, 2024 at 05:50:34PM +0300, Tomi Valkeinen wrote:
> Perhaps it's time... Convert the py cam tool to PyQt6.
> 
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen at ideasonboard.com>
> ---
>  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)

PyQt5 also defines the Read type in QtCore.QSocketNotifier.Type, so this
code is compatible with both Python versions.

>          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)

This works with PyQt5 too.

Should we try to keep Qt5 compatibility with

try:
    from PyQt6 import QtCore, QtWidgets
    from PyQt6.QtCore import Qt
except:
    from PyQt5 import QtCore, QtWidgets
    from PyQt5.QtCore import Qt

?

>  
>          self.state = state
>  

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list