[{"id":30772,"web_url":"https://patchwork.libcamera.org/comment/30772/","msgid":"<CAHW6GY+GkTT3kKcmAOop9S-Z29LsGiotJ2RWiEv2=WME=aX81g@mail.gmail.com>","date":"2024-08-13T08:05:03","subject":"Re: [PATCH v2] py: cam: Convert to PyQt6","submitter":{"id":42,"url":"https://patchwork.libcamera.org/api/people/42/","name":"David Plowman","email":"david.plowman@raspberrypi.com"},"content":"Hi everyone\n\nCould I just put in a vote for maintaining backward compatibility with\nPyQt5 for the time being? By all means deprecate it, put in a warning,\nbut please don't break it _yet_. There are many platforms still\nrunning PyQt5 (the latest Raspberry Pi OS based on Debian Bookworm has\nPyQt5), and we've found many people have had problems upgrading PyQt\nversions and then discovering OpenCV gets upset and doesn't work any\nmore. We ship versions in apt that we guarantee work properly\ntogether, and I wouldn't like to tell people \"sorry, you've got to\nfind versions for yourself that play nicely, or build everything\nyourself from source. Only building some of this stuff can be\nnon-trivial. Good luck.\"\n\nThanks\n\nDavid\n\nOn Mon, 12 Aug 2024 at 18:27, Tomi Valkeinen\n<tomi.valkeinen@ideasonboard.com> wrote:\n>\n> Qt5 is now end of life. The libcamera 'qcam' application has removed\n> support for Qt5, and updated to Qt6.\n>\n> Update the python 'cam' application accordingly to Qt6.\n>\n> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> ---\n> v2:\n> - Added RB tags\n> - Updated the commit description\n>\n>  src/py/cam/cam_qt.py   |  6 +++---\n>  src/py/cam/cam_qtgl.py | 12 ++++++------\n>  2 files changed, 9 insertions(+), 9 deletions(-)\n>\n> diff --git a/src/py/cam/cam_qt.py b/src/py/cam/cam_qt.py\n> index c1723b44..22d8c4da 100644\n> --- a/src/py/cam/cam_qt.py\n> +++ b/src/py/cam/cam_qt.py\n> @@ -2,7 +2,7 @@\n>  # Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n>\n>  from helpers import mfb_to_rgb\n> -from PyQt5 import QtCore, QtGui, QtWidgets\n> +from PyQt6 import QtCore, QtGui, QtWidgets\n>  import libcamera as libcam\n>  import libcamera.utils\n>  import sys\n> @@ -63,10 +63,10 @@ class QtRenderer:\n>          self.buf_mmap_map = buf_mmap_map\n>\n>      def run(self):\n> -        camnotif = QtCore.QSocketNotifier(self.cm.event_fd, QtCore.QSocketNotifier.Read)\n> +        camnotif = QtCore.QSocketNotifier(self.cm.event_fd, QtCore.QSocketNotifier.Type.Read)\n>          camnotif.activated.connect(lambda _: self.readcam())\n>\n> -        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Read)\n> +        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Type.Read)\n>          keynotif.activated.connect(lambda _: self.readkey())\n>\n>          print('Capturing...')\n> diff --git a/src/py/cam/cam_qtgl.py b/src/py/cam/cam_qtgl.py\n> index 6cfbd347..35b4b06b 100644\n> --- a/src/py/cam/cam_qtgl.py\n> +++ b/src/py/cam/cam_qtgl.py\n> @@ -1,8 +1,8 @@\n>  # SPDX-License-Identifier: GPL-2.0-or-later\n>  # Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n>\n> -from PyQt5 import QtCore, QtWidgets\n> -from PyQt5.QtCore import Qt\n> +from PyQt6 import QtCore, QtWidgets\n> +from PyQt6.QtCore import Qt\n>\n>  import math\n>  import os\n> @@ -142,10 +142,10 @@ class QtRenderer:\n>          self.window = window\n>\n>      def run(self):\n> -        camnotif = QtCore.QSocketNotifier(self.state.cm.event_fd, QtCore.QSocketNotifier.Read)\n> +        camnotif = QtCore.QSocketNotifier(self.state.cm.event_fd, QtCore.QSocketNotifier.Type.Read)\n>          camnotif.activated.connect(lambda _: self.readcam())\n>\n> -        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Read)\n> +        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Type.Read)\n>          keynotif.activated.connect(lambda _: self.readkey())\n>\n>          print('Capturing...')\n> @@ -175,8 +175,8 @@ class MainWindow(QtWidgets.QWidget):\n>      def __init__(self, state):\n>          super().__init__()\n>\n> -        self.setAttribute(Qt.WA_PaintOnScreen)\n> -        self.setAttribute(Qt.WA_NativeWindow)\n> +        self.setAttribute(Qt.WidgetAttribute.WA_PaintOnScreen)\n> +        self.setAttribute(Qt.WidgetAttribute.WA_NativeWindow)\n>\n>          self.state = state\n>\n> --\n> 2.43.0\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id BCEF1C323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 13 Aug 2024 08:05:17 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F22F0633B5;\n\tTue, 13 Aug 2024 10:05:16 +0200 (CEST)","from mail-ua1-x92f.google.com (mail-ua1-x92f.google.com\n\t[IPv6:2607:f8b0:4864:20::92f])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 21A9C6337E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 13 Aug 2024 10:05:15 +0200 (CEST)","by mail-ua1-x92f.google.com with SMTP id\n\ta1e0cc1a2514c-831a5b7d250so1752829241.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 13 Aug 2024 01:05:15 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"Jld6anuk\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1723536314; x=1724141114;\n\tdarn=lists.libcamera.org; \n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:from:to:cc:subject:date:message-id:reply-to;\n\tbh=sizw1w9EgEvaDKc7P362PCxJzWGjuB7AfHuaBy8EZDk=;\n\tb=Jld6anukU5++KBITV9YL+sl40IfCImfkEVXwFMRMhpVSrIhGF2DYSK8VvXZlnP7WCz\n\tDV++XEDAzPgoLhRBhgDGkpmd8cVcNg7CpqtNHjxzXix/7HypPIvM+y1OkSVC/ZudrpVW\n\tr4oQ39NSmuAJr9Ma77dOCeIiZnflyQBguUWJIx+Wol60Sv5go/KddpLgMHlzhjpQLlTF\n\tZnAYIEZgoURyDwc4HmXVtlY6/VcHUxhLULQ4RryNOJPEdmaw3eurPYcYPpMjTZQNE0QI\n\tgVWcOYauFsRQhhePNookgVG51U+B7euPML0PvL+83P+neJ6p148x4YVarfWnmdGxzCrq\n\tv6sA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1723536314; x=1724141114;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=sizw1w9EgEvaDKc7P362PCxJzWGjuB7AfHuaBy8EZDk=;\n\tb=k7hW0XW5DFJN54VG/prfzuVn2cwO8MWVb3cRtIl8zev9ZtTOwKpmZOcBLprKK08Htp\n\tYzf2+/cXw4B2etgGkPQ6eaJYu7cuqf8+XWzK/xwuJ4756vu2Iu9hqv+wXsrY/60WN6cK\n\tvQdVJb4tpxMHdQxOcMIJrs3my1+CSZcZ6aSnofh8d1dFgzDiHldnAU4WtZt9rsUbIMsS\n\tB2HtFc7WlO+tFlPIVF2/RUQUiEkgTZBkaaX1AfnlyPzHx1J7CuPp7FxzNlTYBtkH/yAW\n\tl+XU1F/hlm1817lF2/belHtpgZh/NEr4HP2OJQKHwUGus6KQpeTtxCQ+GvKlJlpHCylu\n\t7Dvw==","X-Gm-Message-State":"AOJu0YzNsSaWiE98qahH6uwh3j3EPjhrFI69OWsUWd26frNleH94V4t8\n\tpx6ApZSdUFVCdYMMvDxosFZXbEG4iBiU3QKsq+DbCdWUkcGiau8+HyINsBqsDWKqvAuEWm0JCs7\n\teHQF/1cGpnN/+RsfdcxYtYqQxVDursBaXqGkvrXvFwp/AxkKI","X-Google-Smtp-Source":"AGHT+IGUFH6kcESRlZmbvRfU+kbhGthNY+zJcLXHm7/B8A1JZz1yZgQI5j9t8/IqPp09RnYr4dJo1QnQV0q5rhqVhWQ=","X-Received":"by 2002:a05:6102:a51:b0:48f:ee38:9780 with SMTP id\n\tada2fe7eead31-49743b12f0bmr3320385137.28.1723536313696;\n\tTue, 13 Aug 2024 01:05:13 -0700 (PDT)","MIME-Version":"1.0","References":"<20240812172730.204242-1-tomi.valkeinen@ideasonboard.com>","In-Reply-To":"<20240812172730.204242-1-tomi.valkeinen@ideasonboard.com>","From":"David Plowman <david.plowman@raspberrypi.com>","Date":"Tue, 13 Aug 2024 09:05:03 +0100","Message-ID":"<CAHW6GY+GkTT3kKcmAOop9S-Z29LsGiotJ2RWiEv2=WME=aX81g@mail.gmail.com>","Subject":"Re: [PATCH v2] py: cam: Convert to PyQt6","To":"Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org, \n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>, \n\tKieran Bingham <kieran.bingham@ideasonboard.com>, \n\tStefan Klug <stefan.klug@ideasonboard.com>","Content-Type":"text/plain; charset=\"UTF-8\"","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":30773,"web_url":"https://patchwork.libcamera.org/comment/30773/","msgid":"<ddaa6452-cd05-4d6c-8916-2c7a9897eae2@ideasonboard.com>","date":"2024-08-13T08:08:48","subject":"Re: [PATCH v2] py: cam: Convert to PyQt6","submitter":{"id":109,"url":"https://patchwork.libcamera.org/api/people/109/","name":"Tomi Valkeinen","email":"tomi.valkeinen@ideasonboard.com"},"content":"Hi David,\n\nOn 13/08/2024 11:05, David Plowman wrote:\n> Hi everyone\n> \n> Could I just put in a vote for maintaining backward compatibility with\n> PyQt5 for the time being? By all means deprecate it, put in a warning,\n> but please don't break it _yet_. There are many platforms still\n> running PyQt5 (the latest Raspberry Pi OS based on Debian Bookworm has\n> PyQt5), and we've found many people have had problems upgrading PyQt\n> versions and then discovering OpenCV gets upset and doesn't work any\n> more. We ship versions in apt that we guarantee work properly\n> together, and I wouldn't like to tell people \"sorry, you've got to\n> find versions for yourself that play nicely, or build everything\n> yourself from source. Only building some of this stuff can be\n> non-trivial. Good luck.\"\n\nI hear you, but this is only about the cam.py example application in \nlibcamera's source tree, and only the qt and qtgl renderers of that example.\n\nI don't think that example app is distributed anywhere, or, if I had to \nguess, even used by anyone.\n\n  Tomi\n\n> \n> Thanks\n> \n> David\n> \n> On Mon, 12 Aug 2024 at 18:27, Tomi Valkeinen\n> <tomi.valkeinen@ideasonboard.com> wrote:\n>>\n>> Qt5 is now end of life. The libcamera 'qcam' application has removed\n>> support for Qt5, and updated to Qt6.\n>>\n>> Update the python 'cam' application accordingly to Qt6.\n>>\n>> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n>> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>> ---\n>> v2:\n>> - Added RB tags\n>> - Updated the commit description\n>>\n>>   src/py/cam/cam_qt.py   |  6 +++---\n>>   src/py/cam/cam_qtgl.py | 12 ++++++------\n>>   2 files changed, 9 insertions(+), 9 deletions(-)\n>>\n>> diff --git a/src/py/cam/cam_qt.py b/src/py/cam/cam_qt.py\n>> index c1723b44..22d8c4da 100644\n>> --- a/src/py/cam/cam_qt.py\n>> +++ b/src/py/cam/cam_qt.py\n>> @@ -2,7 +2,7 @@\n>>   # Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n>>\n>>   from helpers import mfb_to_rgb\n>> -from PyQt5 import QtCore, QtGui, QtWidgets\n>> +from PyQt6 import QtCore, QtGui, QtWidgets\n>>   import libcamera as libcam\n>>   import libcamera.utils\n>>   import sys\n>> @@ -63,10 +63,10 @@ class QtRenderer:\n>>           self.buf_mmap_map = buf_mmap_map\n>>\n>>       def run(self):\n>> -        camnotif = QtCore.QSocketNotifier(self.cm.event_fd, QtCore.QSocketNotifier.Read)\n>> +        camnotif = QtCore.QSocketNotifier(self.cm.event_fd, QtCore.QSocketNotifier.Type.Read)\n>>           camnotif.activated.connect(lambda _: self.readcam())\n>>\n>> -        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Read)\n>> +        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Type.Read)\n>>           keynotif.activated.connect(lambda _: self.readkey())\n>>\n>>           print('Capturing...')\n>> diff --git a/src/py/cam/cam_qtgl.py b/src/py/cam/cam_qtgl.py\n>> index 6cfbd347..35b4b06b 100644\n>> --- a/src/py/cam/cam_qtgl.py\n>> +++ b/src/py/cam/cam_qtgl.py\n>> @@ -1,8 +1,8 @@\n>>   # SPDX-License-Identifier: GPL-2.0-or-later\n>>   # Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n>>\n>> -from PyQt5 import QtCore, QtWidgets\n>> -from PyQt5.QtCore import Qt\n>> +from PyQt6 import QtCore, QtWidgets\n>> +from PyQt6.QtCore import Qt\n>>\n>>   import math\n>>   import os\n>> @@ -142,10 +142,10 @@ class QtRenderer:\n>>           self.window = window\n>>\n>>       def run(self):\n>> -        camnotif = QtCore.QSocketNotifier(self.state.cm.event_fd, QtCore.QSocketNotifier.Read)\n>> +        camnotif = QtCore.QSocketNotifier(self.state.cm.event_fd, QtCore.QSocketNotifier.Type.Read)\n>>           camnotif.activated.connect(lambda _: self.readcam())\n>>\n>> -        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Read)\n>> +        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Type.Read)\n>>           keynotif.activated.connect(lambda _: self.readkey())\n>>\n>>           print('Capturing...')\n>> @@ -175,8 +175,8 @@ class MainWindow(QtWidgets.QWidget):\n>>       def __init__(self, state):\n>>           super().__init__()\n>>\n>> -        self.setAttribute(Qt.WA_PaintOnScreen)\n>> -        self.setAttribute(Qt.WA_NativeWindow)\n>> +        self.setAttribute(Qt.WidgetAttribute.WA_PaintOnScreen)\n>> +        self.setAttribute(Qt.WidgetAttribute.WA_NativeWindow)\n>>\n>>           self.state = state\n>>\n>> --\n>> 2.43.0\n>>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id D13DABDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 13 Aug 2024 08:08:53 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D8A77633BA;\n\tTue, 13 Aug 2024 10:08:52 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1F23C633B3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 13 Aug 2024 10:08:52 +0200 (CEST)","from [192.168.88.20] (91-156-87-48.elisa-laajakaista.fi\n\t[91.156.87.48])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id C98BD827;\n\tTue, 13 Aug 2024 10:07:54 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"M8l2iVgf\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1723536475;\n\tbh=MOqURABEgedj2f+TGIlF11RI+N/dUFcPgyEQ3JhFjAo=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=M8l2iVgfkuT/BMkBdVmQvOTXCdOle0+dO6z1ZlQmian3A9paf/pRSr+3c7kPvfOV0\n\tH1y2Qgw1kGAh3YyRZ6u23X35IBYY3qfT8AjpUjjV3Mtyn6J7KTSbIoXJRCiO+CBlfi\n\t3iBjzaq1RJAbwjbb8oVbbkmHjCaOMGMeLxa3hyZQ=","Message-ID":"<ddaa6452-cd05-4d6c-8916-2c7a9897eae2@ideasonboard.com>","Date":"Tue, 13 Aug 2024 11:08:48 +0300","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v2] py: cam: Convert to PyQt6","To":"David Plowman <david.plowman@raspberrypi.com>","Cc":"libcamera-devel@lists.libcamera.org,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>,\n\tStefan Klug <stefan.klug@ideasonboard.com>","References":"<20240812172730.204242-1-tomi.valkeinen@ideasonboard.com>\n\t<CAHW6GY+GkTT3kKcmAOop9S-Z29LsGiotJ2RWiEv2=WME=aX81g@mail.gmail.com>","Content-Language":"en-US","From":"Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>","Autocrypt":"addr=tomi.valkeinen@ideasonboard.com; keydata=\n\t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","In-Reply-To":"<CAHW6GY+GkTT3kKcmAOop9S-Z29LsGiotJ2RWiEv2=WME=aX81g@mail.gmail.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":30775,"web_url":"https://patchwork.libcamera.org/comment/30775/","msgid":"<CAHW6GYJMQR600VnQK35sq0zqarjr4ryXV8mNZ6gTWdBSxi3XOg@mail.gmail.com>","date":"2024-08-13T08:29:37","subject":"Re: [PATCH v2] py: cam: Convert to PyQt6","submitter":{"id":42,"url":"https://patchwork.libcamera.org/api/people/42/","name":"David Plowman","email":"david.plowman@raspberrypi.com"},"content":"Hi Tomi\n\nWell, I guess if we don't think there's a real problem then it's fine,\nthough I assume someone somewhere must be using it! I suppose on a Pi\nfolks have lots of other apps and Qt apps to run anyway.\n\nThanks\nDavid\n\nOn Tue, 13 Aug 2024 at 09:08, Tomi Valkeinen\n<tomi.valkeinen@ideasonboard.com> wrote:\n>\n> Hi David,\n>\n> On 13/08/2024 11:05, David Plowman wrote:\n> > Hi everyone\n> >\n> > Could I just put in a vote for maintaining backward compatibility with\n> > PyQt5 for the time being? By all means deprecate it, put in a warning,\n> > but please don't break it _yet_. There are many platforms still\n> > running PyQt5 (the latest Raspberry Pi OS based on Debian Bookworm has\n> > PyQt5), and we've found many people have had problems upgrading PyQt\n> > versions and then discovering OpenCV gets upset and doesn't work any\n> > more. We ship versions in apt that we guarantee work properly\n> > together, and I wouldn't like to tell people \"sorry, you've got to\n> > find versions for yourself that play nicely, or build everything\n> > yourself from source. Only building some of this stuff can be\n> > non-trivial. Good luck.\"\n>\n> I hear you, but this is only about the cam.py example application in\n> libcamera's source tree, and only the qt and qtgl renderers of that example.\n>\n> I don't think that example app is distributed anywhere, or, if I had to\n> guess, even used by anyone.\n>\n>   Tomi\n>\n> >\n> > Thanks\n> >\n> > David\n> >\n> > On Mon, 12 Aug 2024 at 18:27, Tomi Valkeinen\n> > <tomi.valkeinen@ideasonboard.com> wrote:\n> >>\n> >> Qt5 is now end of life. The libcamera 'qcam' application has removed\n> >> support for Qt5, and updated to Qt6.\n> >>\n> >> Update the python 'cam' application accordingly to Qt6.\n> >>\n> >> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n> >> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> >> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> >> ---\n> >> v2:\n> >> - Added RB tags\n> >> - Updated the commit description\n> >>\n> >>   src/py/cam/cam_qt.py   |  6 +++---\n> >>   src/py/cam/cam_qtgl.py | 12 ++++++------\n> >>   2 files changed, 9 insertions(+), 9 deletions(-)\n> >>\n> >> diff --git a/src/py/cam/cam_qt.py b/src/py/cam/cam_qt.py\n> >> index c1723b44..22d8c4da 100644\n> >> --- a/src/py/cam/cam_qt.py\n> >> +++ b/src/py/cam/cam_qt.py\n> >> @@ -2,7 +2,7 @@\n> >>   # Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n> >>\n> >>   from helpers import mfb_to_rgb\n> >> -from PyQt5 import QtCore, QtGui, QtWidgets\n> >> +from PyQt6 import QtCore, QtGui, QtWidgets\n> >>   import libcamera as libcam\n> >>   import libcamera.utils\n> >>   import sys\n> >> @@ -63,10 +63,10 @@ class QtRenderer:\n> >>           self.buf_mmap_map = buf_mmap_map\n> >>\n> >>       def run(self):\n> >> -        camnotif = QtCore.QSocketNotifier(self.cm.event_fd, QtCore.QSocketNotifier.Read)\n> >> +        camnotif = QtCore.QSocketNotifier(self.cm.event_fd, QtCore.QSocketNotifier.Type.Read)\n> >>           camnotif.activated.connect(lambda _: self.readcam())\n> >>\n> >> -        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Read)\n> >> +        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Type.Read)\n> >>           keynotif.activated.connect(lambda _: self.readkey())\n> >>\n> >>           print('Capturing...')\n> >> diff --git a/src/py/cam/cam_qtgl.py b/src/py/cam/cam_qtgl.py\n> >> index 6cfbd347..35b4b06b 100644\n> >> --- a/src/py/cam/cam_qtgl.py\n> >> +++ b/src/py/cam/cam_qtgl.py\n> >> @@ -1,8 +1,8 @@\n> >>   # SPDX-License-Identifier: GPL-2.0-or-later\n> >>   # Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n> >>\n> >> -from PyQt5 import QtCore, QtWidgets\n> >> -from PyQt5.QtCore import Qt\n> >> +from PyQt6 import QtCore, QtWidgets\n> >> +from PyQt6.QtCore import Qt\n> >>\n> >>   import math\n> >>   import os\n> >> @@ -142,10 +142,10 @@ class QtRenderer:\n> >>           self.window = window\n> >>\n> >>       def run(self):\n> >> -        camnotif = QtCore.QSocketNotifier(self.state.cm.event_fd, QtCore.QSocketNotifier.Read)\n> >> +        camnotif = QtCore.QSocketNotifier(self.state.cm.event_fd, QtCore.QSocketNotifier.Type.Read)\n> >>           camnotif.activated.connect(lambda _: self.readcam())\n> >>\n> >> -        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Read)\n> >> +        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Type.Read)\n> >>           keynotif.activated.connect(lambda _: self.readkey())\n> >>\n> >>           print('Capturing...')\n> >> @@ -175,8 +175,8 @@ class MainWindow(QtWidgets.QWidget):\n> >>       def __init__(self, state):\n> >>           super().__init__()\n> >>\n> >> -        self.setAttribute(Qt.WA_PaintOnScreen)\n> >> -        self.setAttribute(Qt.WA_NativeWindow)\n> >> +        self.setAttribute(Qt.WidgetAttribute.WA_PaintOnScreen)\n> >> +        self.setAttribute(Qt.WidgetAttribute.WA_NativeWindow)\n> >>\n> >>           self.state = state\n> >>\n> >> --\n> >> 2.43.0\n> >>\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id B992FC323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 13 Aug 2024 08:29:51 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A2DFA633B5;\n\tTue, 13 Aug 2024 10:29:50 +0200 (CEST)","from mail-qk1-x72d.google.com (mail-qk1-x72d.google.com\n\t[IPv6:2607:f8b0:4864:20::72d])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7C74C6337E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 13 Aug 2024 10:29:49 +0200 (CEST)","by mail-qk1-x72d.google.com with SMTP id\n\taf79cd13be357-7a1df0a93eeso267660885a.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 13 Aug 2024 01:29:49 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"L2bcQBQ+\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1723537788; x=1724142588;\n\tdarn=lists.libcamera.org; \n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:from:to:cc:subject:date:message-id:reply-to;\n\tbh=UC8ncv2iwp3slQGUyEkBYOd6kzMG1Nlf+nQJFnwRdBE=;\n\tb=L2bcQBQ+v+X7ewDUlna2HTSSiSHjmWppOQA/cyVpVcr1Khn94E+Id8OkHWRQjWCOlN\n\t8s0/RuZliTKQh/xPDQZaMJtiYdBgHhaNvqPmqc8blq68c51u57+vDdvYfRJ75Hp136AA\n\tDkvPFE/pkuSwQFmnoQoL8G2s3SPXQLawyaWH+TOe3WKrSmno2bH8uJG4oPHNdam+VkR4\n\tdlO3S+Bto/xr1b8Y+UzyluZYuxOrojrC2tJfmNrpYGS9EdcBe3nKRo6bcdgkOYmYMVp8\n\tPAdfKwS9Ee8Xi14HSNfkuq+it85TM2EKIvj9qNVK0TKYch2FGm4rOoI25/ucU8MBewX4\n\tMDcA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1723537788; x=1724142588;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=UC8ncv2iwp3slQGUyEkBYOd6kzMG1Nlf+nQJFnwRdBE=;\n\tb=laPVxS3uo76vQo5iTFpFfmwPLTHHJG6hPdZ4vVv+G7m5GtjIgogVWEDT6t43fHn1o+\n\tPlcZbVQfdgIVukWSTJNW70qlSciZT/sko4BIUeJZ8kB1bt+hipCUQ6NiocpS64IhX+WQ\n\tFoFgLyUEmMuStdEi4VWPnbKCLqAu/tYk+iVkG9Z96sTu6nYBAHCQDkgLAJXEtZVq2EJ9\n\t1xQuR5dZqHPblVBAKwFOu3ibNrCmQIW3aGS0mOCVsOzdx9Phvi/IFn4j5SQAfgMjO9xY\n\tay6SMGzo+D+U4zduiQsJGAlgGSfccYnlYN/3eTelzyeLeDBP84bObLT56Ls7kMnX8+pK\n\tRLbw==","X-Gm-Message-State":"AOJu0Yx/IoiwdzRZdhOrUoZZWvohcJsACcaqmYG7D//F7t24qmgknxSA\n\t8tGocN0av0YavVe8v8YH6PcfYHVFJqMoaM28PFMjEvnjj6eBNa8MYQzeAAunw5BCdMhovGxKlMw\n\t63KlIZw9XXDSkdPB6oI677dQJ7+d+nNwEJFcRFWsYe/HYxKIM","X-Google-Smtp-Source":"AGHT+IGnd4zvhM6dskQ1GPGS47Jz3vGifjXueEQZzWEUrB8njydENTxKqr3kXEn9GVmqYIXlnODUsxzTBLhV6kGkpl8=","X-Received":"by 2002:a05:620a:45a2:b0:79e:f8b7:5c73 with SMTP id\n\taf79cd13be357-7a4e15cc8e7mr301721685a.55.1723537788240;\n\tTue, 13 Aug 2024 01:29:48 -0700 (PDT)","MIME-Version":"1.0","References":"<20240812172730.204242-1-tomi.valkeinen@ideasonboard.com>\n\t<CAHW6GY+GkTT3kKcmAOop9S-Z29LsGiotJ2RWiEv2=WME=aX81g@mail.gmail.com>\n\t<ddaa6452-cd05-4d6c-8916-2c7a9897eae2@ideasonboard.com>","In-Reply-To":"<ddaa6452-cd05-4d6c-8916-2c7a9897eae2@ideasonboard.com>","From":"David Plowman <david.plowman@raspberrypi.com>","Date":"Tue, 13 Aug 2024 09:29:37 +0100","Message-ID":"<CAHW6GYJMQR600VnQK35sq0zqarjr4ryXV8mNZ6gTWdBSxi3XOg@mail.gmail.com>","Subject":"Re: [PATCH v2] py: cam: Convert to PyQt6","To":"Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org, \n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>, \n\tKieran Bingham <kieran.bingham@ideasonboard.com>, \n\tStefan Klug <stefan.klug@ideasonboard.com>","Content-Type":"text/plain; charset=\"UTF-8\"","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":30776,"web_url":"https://patchwork.libcamera.org/comment/30776/","msgid":"<20240813083113.GI32749@pendragon.ideasonboard.com>","date":"2024-08-13T08:31:13","subject":"Re: [PATCH v2] py: cam: Convert to PyQt6","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi David,\n\nOn Tue, Aug 13, 2024 at 09:05:03AM +0100, David Plowman wrote:\n> Hi everyone\n> \n> Could I just put in a vote for maintaining backward compatibility with\n> PyQt5 for the time being? By all means deprecate it, put in a warning,\n> but please don't break it _yet_. There are many platforms still\n> running PyQt5 (the latest Raspberry Pi OS based on Debian Bookworm has\n> PyQt5), and we've found many people have had problems upgrading PyQt\n> versions and then discovering OpenCV gets upset and doesn't work any\n> more.\n\nThis is the exact kind of reason why I proposed supporting both PyQt5\nand PyQt6 for the time being.\n\n> We ship versions in apt that we guarantee work properly\n> together, and I wouldn't like to tell people \"sorry, you've got to\n> find versions for yourself that play nicely, or build everything\n> yourself from source. Only building some of this stuff can be\n> non-trivial. Good luck.\"\n\nTomi, could you send a patch to restore PyQt5 support ?\n\nDavid, please note that this will be best effort, until we start using\nQt features that differ between Qt5 and Qt6. I don't expect that to\nhappen soon though, there's little development done on the Qt backend of\ncam.py at the moment.\n\n> On Mon, 12 Aug 2024 at 18:27, Tomi Valkeinen wrote:\n> >\n> > Qt5 is now end of life. The libcamera 'qcam' application has removed\n> > support for Qt5, and updated to Qt6.\n> >\n> > Update the python 'cam' application accordingly to Qt6.\n> >\n> > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n> > Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > ---\n> > v2:\n> > - Added RB tags\n> > - Updated the commit description\n> >\n> >  src/py/cam/cam_qt.py   |  6 +++---\n> >  src/py/cam/cam_qtgl.py | 12 ++++++------\n> >  2 files changed, 9 insertions(+), 9 deletions(-)\n> >\n> > diff --git a/src/py/cam/cam_qt.py b/src/py/cam/cam_qt.py\n> > index c1723b44..22d8c4da 100644\n> > --- a/src/py/cam/cam_qt.py\n> > +++ b/src/py/cam/cam_qt.py\n> > @@ -2,7 +2,7 @@\n> >  # Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n> >\n> >  from helpers import mfb_to_rgb\n> > -from PyQt5 import QtCore, QtGui, QtWidgets\n> > +from PyQt6 import QtCore, QtGui, QtWidgets\n> >  import libcamera as libcam\n> >  import libcamera.utils\n> >  import sys\n> > @@ -63,10 +63,10 @@ class QtRenderer:\n> >          self.buf_mmap_map = buf_mmap_map\n> >\n> >      def run(self):\n> > -        camnotif = QtCore.QSocketNotifier(self.cm.event_fd, QtCore.QSocketNotifier.Read)\n> > +        camnotif = QtCore.QSocketNotifier(self.cm.event_fd, QtCore.QSocketNotifier.Type.Read)\n> >          camnotif.activated.connect(lambda _: self.readcam())\n> >\n> > -        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Read)\n> > +        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Type.Read)\n> >          keynotif.activated.connect(lambda _: self.readkey())\n> >\n> >          print('Capturing...')\n> > diff --git a/src/py/cam/cam_qtgl.py b/src/py/cam/cam_qtgl.py\n> > index 6cfbd347..35b4b06b 100644\n> > --- a/src/py/cam/cam_qtgl.py\n> > +++ b/src/py/cam/cam_qtgl.py\n> > @@ -1,8 +1,8 @@\n> >  # SPDX-License-Identifier: GPL-2.0-or-later\n> >  # Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n> >\n> > -from PyQt5 import QtCore, QtWidgets\n> > -from PyQt5.QtCore import Qt\n> > +from PyQt6 import QtCore, QtWidgets\n> > +from PyQt6.QtCore import Qt\n> >\n> >  import math\n> >  import os\n> > @@ -142,10 +142,10 @@ class QtRenderer:\n> >          self.window = window\n> >\n> >      def run(self):\n> > -        camnotif = QtCore.QSocketNotifier(self.state.cm.event_fd, QtCore.QSocketNotifier.Read)\n> > +        camnotif = QtCore.QSocketNotifier(self.state.cm.event_fd, QtCore.QSocketNotifier.Type.Read)\n> >          camnotif.activated.connect(lambda _: self.readcam())\n> >\n> > -        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Read)\n> > +        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Type.Read)\n> >          keynotif.activated.connect(lambda _: self.readkey())\n> >\n> >          print('Capturing...')\n> > @@ -175,8 +175,8 @@ class MainWindow(QtWidgets.QWidget):\n> >      def __init__(self, state):\n> >          super().__init__()\n> >\n> > -        self.setAttribute(Qt.WA_PaintOnScreen)\n> > -        self.setAttribute(Qt.WA_NativeWindow)\n> > +        self.setAttribute(Qt.WidgetAttribute.WA_PaintOnScreen)\n> > +        self.setAttribute(Qt.WidgetAttribute.WA_NativeWindow)\n> >\n> >          self.state = state\n> >","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 68E80C323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 13 Aug 2024 08:31:39 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id A2A53633B9;\n\tTue, 13 Aug 2024 10:31:38 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7D6A763398\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 13 Aug 2024 10:31:37 +0200 (CEST)","from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi\n\t[81.175.209.231])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 3871F827;\n\tTue, 13 Aug 2024 10:30:40 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"eArxyFx7\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1723537840;\n\tbh=y3rVElQlZr1pPndhjkbXhaUJR30CaySaolNnTu6VHKY=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=eArxyFx7F5UAv565XMe4FBQmSZsclAnZX2APNHyrRrQdr5Ru+4aBEkyNnYz7STAGz\n\tUMKTNZYFyhyPD5/ALmiKpqMSclt1/uE1L5XtNPFUhOlviepTP9c+HZJS7P2E/r6xKx\n\t4UtBiAQDwb5JvET8StddUygRFC18VyWXg/s3UduY=","Date":"Tue, 13 Aug 2024 11:31:13 +0300","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"David Plowman <david.plowman@raspberrypi.com>","Cc":"Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>,\n\tStefan Klug <stefan.klug@ideasonboard.com>","Subject":"Re: [PATCH v2] py: cam: Convert to PyQt6","Message-ID":"<20240813083113.GI32749@pendragon.ideasonboard.com>","References":"<20240812172730.204242-1-tomi.valkeinen@ideasonboard.com>\n\t<CAHW6GY+GkTT3kKcmAOop9S-Z29LsGiotJ2RWiEv2=WME=aX81g@mail.gmail.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","In-Reply-To":"<CAHW6GY+GkTT3kKcmAOop9S-Z29LsGiotJ2RWiEv2=WME=aX81g@mail.gmail.com>","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":30780,"web_url":"https://patchwork.libcamera.org/comment/30780/","msgid":"<2bb4a3e4-1ddd-410b-9149-7616ec57cffc@ideasonboard.com>","date":"2024-08-13T09:04:16","subject":"Re: [PATCH v2] py: cam: Convert to PyQt6","submitter":{"id":109,"url":"https://patchwork.libcamera.org/api/people/109/","name":"Tomi Valkeinen","email":"tomi.valkeinen@ideasonboard.com"},"content":"Hi,\n\nOn 13/08/2024 11:31, Laurent Pinchart wrote:\n> Hi David,\n> \n> On Tue, Aug 13, 2024 at 09:05:03AM +0100, David Plowman wrote:\n>> Hi everyone\n>>\n>> Could I just put in a vote for maintaining backward compatibility with\n>> PyQt5 for the time being? By all means deprecate it, put in a warning,\n>> but please don't break it _yet_. There are many platforms still\n>> running PyQt5 (the latest Raspberry Pi OS based on Debian Bookworm has\n>> PyQt5), and we've found many people have had problems upgrading PyQt\n>> versions and then discovering OpenCV gets upset and doesn't work any\n>> more.\n\nBut there are ready PyQt6 packages available, aren't there? So if the \nuser wants to run libcamera's cam.py, he just needs to \"apt install \npython3-pyqt6\"?\n\n> This is the exact kind of reason why I proposed supporting both PyQt5\n> and PyQt6 for the time being.\n> \n>> We ship versions in apt that we guarantee work properly\n>> together, and I wouldn't like to tell people \"sorry, you've got to\n>> find versions for yourself that play nicely, or build everything\n>> yourself from source. Only building some of this stuff can be\n>> non-trivial. Good luck.\"\n> \n> Tomi, could you send a patch to restore PyQt5 support ?\n\nAren't we then just adding code for the theoretical case that someone \nneeds and uses this and cannot install PyQt6? Again, this is an example \nthat is not distributed anywhere (afaik) else but the source tree. It \ndoes not affect any other python script or library, nor does it prevent \npeople from continuing to use PyQt5.\n\nThe change itself is trivial, but I truly don't see the point.\n\n  Tomi\n\n> David, please note that this will be best effort, until we start using\n> Qt features that differ between Qt5 and Qt6. I don't expect that to\n> happen soon though, there's little development done on the Qt backend of\n> cam.py at the moment.\n> \n>> On Mon, 12 Aug 2024 at 18:27, Tomi Valkeinen wrote:\n>>>\n>>> Qt5 is now end of life. The libcamera 'qcam' application has removed\n>>> support for Qt5, and updated to Qt6.\n>>>\n>>> Update the python 'cam' application accordingly to Qt6.\n>>>\n>>> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n>>> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n>>> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n>>> ---\n>>> v2:\n>>> - Added RB tags\n>>> - Updated the commit description\n>>>\n>>>   src/py/cam/cam_qt.py   |  6 +++---\n>>>   src/py/cam/cam_qtgl.py | 12 ++++++------\n>>>   2 files changed, 9 insertions(+), 9 deletions(-)\n>>>\n>>> diff --git a/src/py/cam/cam_qt.py b/src/py/cam/cam_qt.py\n>>> index c1723b44..22d8c4da 100644\n>>> --- a/src/py/cam/cam_qt.py\n>>> +++ b/src/py/cam/cam_qt.py\n>>> @@ -2,7 +2,7 @@\n>>>   # Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n>>>\n>>>   from helpers import mfb_to_rgb\n>>> -from PyQt5 import QtCore, QtGui, QtWidgets\n>>> +from PyQt6 import QtCore, QtGui, QtWidgets\n>>>   import libcamera as libcam\n>>>   import libcamera.utils\n>>>   import sys\n>>> @@ -63,10 +63,10 @@ class QtRenderer:\n>>>           self.buf_mmap_map = buf_mmap_map\n>>>\n>>>       def run(self):\n>>> -        camnotif = QtCore.QSocketNotifier(self.cm.event_fd, QtCore.QSocketNotifier.Read)\n>>> +        camnotif = QtCore.QSocketNotifier(self.cm.event_fd, QtCore.QSocketNotifier.Type.Read)\n>>>           camnotif.activated.connect(lambda _: self.readcam())\n>>>\n>>> -        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Read)\n>>> +        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Type.Read)\n>>>           keynotif.activated.connect(lambda _: self.readkey())\n>>>\n>>>           print('Capturing...')\n>>> diff --git a/src/py/cam/cam_qtgl.py b/src/py/cam/cam_qtgl.py\n>>> index 6cfbd347..35b4b06b 100644\n>>> --- a/src/py/cam/cam_qtgl.py\n>>> +++ b/src/py/cam/cam_qtgl.py\n>>> @@ -1,8 +1,8 @@\n>>>   # SPDX-License-Identifier: GPL-2.0-or-later\n>>>   # Copyright (C) 2022, Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\n>>>\n>>> -from PyQt5 import QtCore, QtWidgets\n>>> -from PyQt5.QtCore import Qt\n>>> +from PyQt6 import QtCore, QtWidgets\n>>> +from PyQt6.QtCore import Qt\n>>>\n>>>   import math\n>>>   import os\n>>> @@ -142,10 +142,10 @@ class QtRenderer:\n>>>           self.window = window\n>>>\n>>>       def run(self):\n>>> -        camnotif = QtCore.QSocketNotifier(self.state.cm.event_fd, QtCore.QSocketNotifier.Read)\n>>> +        camnotif = QtCore.QSocketNotifier(self.state.cm.event_fd, QtCore.QSocketNotifier.Type.Read)\n>>>           camnotif.activated.connect(lambda _: self.readcam())\n>>>\n>>> -        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Read)\n>>> +        keynotif = QtCore.QSocketNotifier(sys.stdin.fileno(), QtCore.QSocketNotifier.Type.Read)\n>>>           keynotif.activated.connect(lambda _: self.readkey())\n>>>\n>>>           print('Capturing...')\n>>> @@ -175,8 +175,8 @@ class MainWindow(QtWidgets.QWidget):\n>>>       def __init__(self, state):\n>>>           super().__init__()\n>>>\n>>> -        self.setAttribute(Qt.WA_PaintOnScreen)\n>>> -        self.setAttribute(Qt.WA_NativeWindow)\n>>> +        self.setAttribute(Qt.WidgetAttribute.WA_PaintOnScreen)\n>>> +        self.setAttribute(Qt.WidgetAttribute.WA_NativeWindow)\n>>>\n>>>           self.state = state\n>>>\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 33064C323E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 13 Aug 2024 09:04:21 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 396BD633B5;\n\tTue, 13 Aug 2024 11:04:20 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 8568B6337E\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 13 Aug 2024 11:04:19 +0200 (CEST)","from [192.168.88.20] (91-156-87-48.elisa-laajakaista.fi\n\t[91.156.87.48])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 33129A1A;\n\tTue, 13 Aug 2024 11:03:22 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"gezbhJi6\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1723539802;\n\tbh=ZQDv4712dmv9sc+yRcI2HPQ8ddFJCVVNL7FNbZWAfuo=;\n\th=Date:Subject:To:Cc:References:From:In-Reply-To:From;\n\tb=gezbhJi6ewWIIWEK5bu2ot4ZjyxCCTFJALuuch80uc7qeQBU0n1CjS+sSZx6thzpR\n\t9BeEdHcur62iY4YUnA/Y5TYLRvPjOgvlBG+J8zuA6jFE2kTDWj+RA6aVa5M2szLLBM\n\tC9vC5ThZ6KnXMT0LpqzqeT22tYLOp8EBy6vv4s4E=","Message-ID":"<2bb4a3e4-1ddd-410b-9149-7616ec57cffc@ideasonboard.com>","Date":"Tue, 13 Aug 2024 12:04:16 +0300","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","Subject":"Re: [PATCH v2] py: cam: Convert to PyQt6","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tDavid Plowman <david.plowman@raspberrypi.com>","Cc":"libcamera-devel@lists.libcamera.org,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>,\n\tStefan Klug <stefan.klug@ideasonboard.com>","References":"<20240812172730.204242-1-tomi.valkeinen@ideasonboard.com>\n\t<CAHW6GY+GkTT3kKcmAOop9S-Z29LsGiotJ2RWiEv2=WME=aX81g@mail.gmail.com>\n\t<20240813083113.GI32749@pendragon.ideasonboard.com>","Content-Language":"en-US","From":"Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>","Autocrypt":"addr=tomi.valkeinen@ideasonboard.com; keydata=\n\t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","In-Reply-To":"<20240813083113.GI32749@pendragon.ideasonboard.com>","Content-Type":"text/plain; charset=UTF-8; format=flowed","Content-Transfer-Encoding":"7bit","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]