Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Ultimaker/Cura.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaime van Kessel <nallath@gmail.com>2022-01-06 11:20:17 +0300
committerJaime van Kessel <nallath@gmail.com>2022-01-06 11:20:17 +0300
commit28924a1c87032e29306d0fca067bb39abc2accf2 (patch)
tree5a9f8418d942d5ad92b6f37277587f2c83af7ed9
parent58c9522d78fa2279b689b7f38314c5c978f47272 (diff)
parent3c12a2629eb2bb3daf18308077c53c45a4a674c7 (diff)
Merge branch 'CURA-8591_upgrade_to_qt62' of github.com:Ultimaker/Cura into PyQt6_upgrade
-rw-r--r--cura/API/Account.py8
-rw-r--r--cura/API/ConnectionStatus.py2
-rw-r--r--cura/API/__init__.py7
-rw-r--r--cura/AutoSave.py2
-rwxr-xr-xcura/BuildVolume.py2
-rw-r--r--cura/CameraAnimation.py6
-rw-r--r--cura/CrashHandler.py18
-rw-r--r--cura/CuraActions.py4
-rwxr-xr-xcura/CuraApplication.py52
-rw-r--r--cura/CuraPackageManager.py2
-rw-r--r--cura/CuraView.py2
-rw-r--r--cura/MachineAction.py2
-rw-r--r--cura/Machines/MachineErrorChecker.py2
-rw-r--r--cura/Machines/MachineNode.py2
-rw-r--r--cura/Machines/Models/BaseMaterialsModel.py34
-rw-r--r--cura/Machines/Models/BuildPlateModel.py6
-rw-r--r--cura/Machines/Models/CustomQualityProfilesDropDownMenuModel.py2
-rw-r--r--cura/Machines/Models/DiscoveredCloudPrintersModel.py10
-rw-r--r--cura/Machines/Models/DiscoveredPrintersModel.py2
-rw-r--r--cura/Machines/Models/ExtrudersModel.py28
-rw-r--r--cura/Machines/Models/FirstStartMachineActionsModel.py8
-rw-r--r--cura/Machines/Models/GlobalStacksModel.py18
-rw-r--r--cura/Machines/Models/IntentCategoryModel.py14
-rw-r--r--cura/Machines/Models/IntentModel.py12
-rw-r--r--cura/Machines/Models/MaterialBrandsModel.py12
-rw-r--r--cura/Machines/Models/MaterialManagementModel.py4
-rw-r--r--cura/Machines/Models/MultiBuildPlateModel.py2
-rw-r--r--cura/Machines/Models/NozzleModel.py8
-rw-r--r--cura/Machines/Models/QualityManagementModel.py16
-rw-r--r--cura/Machines/Models/QualityProfilesDropDownMenuModel.py18
-rw-r--r--cura/Machines/Models/QualitySettingsModel.py16
-rw-r--r--cura/Machines/Models/SettingVisibilityPresetsModel.py2
-rw-r--r--cura/Machines/Models/UserChangesModel.py14
-rw-r--r--cura/Machines/QualityChangesGroup.py2
-rw-r--r--cura/OAuth2/AuthorizationHelpers.py2
-rw-r--r--cura/OAuth2/AuthorizationService.py4
-rwxr-xr-xcura/PlatformPhysics.py2
-rw-r--r--cura/PrintJobPreviewImageProvider.py8
-rw-r--r--cura/PrinterOutput/FirmwareUpdater.py2
-rw-r--r--cura/PrinterOutput/GenericOutputController.py2
-rw-r--r--cura/PrinterOutput/Models/ExtruderConfigurationModel.py2
-rw-r--r--cura/PrinterOutput/Models/ExtruderOutputModel.py2
-rw-r--r--cura/PrinterOutput/Models/MaterialOutputModel.py2
-rw-r--r--cura/PrinterOutput/Models/PrintJobOutputModel.py4
-rw-r--r--cura/PrinterOutput/Models/PrinterConfigurationModel.py2
-rw-r--r--cura/PrinterOutput/Models/PrinterOutputModel.py2
-rw-r--r--cura/PrinterOutput/NetworkMJPGImage.py8
-rw-r--r--cura/PrinterOutput/NetworkedPrinterOutputDevice.py18
-rw-r--r--cura/PrinterOutput/PrinterOutputDevice.py12
-rw-r--r--cura/PrinterOutput/UploadMaterialsJob.py4
-rw-r--r--cura/Scene/ConvexHullDecorator.py2
-rw-r--r--cura/Scene/CuraSceneController.py4
-rw-r--r--cura/Settings/ContainerManager.py6
-rw-r--r--cura/Settings/CuraContainerRegistry.py2
-rwxr-xr-xcura/Settings/CuraContainerStack.py2
-rwxr-xr-xcura/Settings/ExtruderManager.py4
-rw-r--r--cura/Settings/ExtruderStack.py2
-rwxr-xr-xcura/Settings/GlobalStack.py2
-rw-r--r--cura/Settings/IntentManager.py2
-rwxr-xr-xcura/Settings/MachineManager.py2
-rw-r--r--cura/Settings/MachineNameValidator.py8
-rw-r--r--cura/Settings/SettingInheritanceManager.py2
-rw-r--r--cura/Settings/SettingVisibilityPreset.py2
-rw-r--r--cura/Settings/SidebarCustomMenuItemsModel.py10
-rw-r--r--cura/Settings/SimpleModeSettingsManager.py2
-rw-r--r--cura/SingleInstance.py2
-rw-r--r--cura/Snapshot.py6
-rw-r--r--cura/Stages/CuraStage.py2
-rw-r--r--cura/UI/CuraSplashScreen.py18
-rw-r--r--cura/UI/MachineActionManager.py2
-rw-r--r--cura/UI/MachineSettingsManager.py2
-rw-r--r--cura/UI/ObjectsModel.py18
-rw-r--r--cura/UI/PrintInformation.py2
-rw-r--r--cura/UI/RecommendedMode.py2
-rw-r--r--cura/UI/TextManager.py2
-rw-r--r--cura/UI/WelcomePagesModel.py14
-rw-r--r--cura/UI/WhatsNewPagesModel.py4
-rw-r--r--cura/UltimakerCloud/CloudMaterialSync.py4
-rw-r--r--cura/UltimakerCloud/UltimakerCloudScope.py2
-rw-r--r--cura/Utils/NetworkingUtil.py2
-rwxr-xr-xcura_app.py14
-rwxr-xr-xplugins/3MFReader/ThreeMFWorkspaceReader.py2
-rw-r--r--plugins/3MFReader/UpdatableMachinesModel.py10
-rw-r--r--plugins/3MFReader/WorkspaceDialog.py2
-rw-r--r--plugins/3MFWriter/ThreeMFWriter.py2
-rw-r--r--plugins/CuraDrive/src/CreateBackupJob.py2
-rw-r--r--plugins/CuraDrive/src/DriveApiService.py2
-rw-r--r--plugins/CuraDrive/src/DrivePluginExtension.py2
-rw-r--r--plugins/CuraDrive/src/RestoreBackupJob.py4
-rwxr-xr-xplugins/CuraEngineBackend/CuraEngineBackend.py4
-rw-r--r--plugins/CuraEngineBackend/StartSliceJob.py2
-rw-r--r--plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py6
-rw-r--r--plugins/DigitalLibrary/src/DFFileUploader.py6
-rw-r--r--plugins/DigitalLibrary/src/DigitalFactoryApiClient.py6
-rw-r--r--plugins/DigitalLibrary/src/DigitalFactoryController.py10
-rw-r--r--plugins/DigitalLibrary/src/DigitalFactoryFileModel.py16
-rw-r--r--plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py14
-rw-r--r--plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py4
-rw-r--r--plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py2
-rw-r--r--plugins/ImageReader/ImageReader.py4
-rw-r--r--plugins/ImageReader/ImageReaderUI.py2
-rwxr-xr-xplugins/MachineSettingsAction/MachineSettingsAction.py4
-rw-r--r--plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml4
-rw-r--r--plugins/ModelChecker/ModelChecker.py2
-rw-r--r--plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py2
-rw-r--r--plugins/PerObjectSettingsTool/__init__.py2
-rw-r--r--plugins/PostProcessingPlugin/PostProcessingPlugin.py2
-rw-r--r--plugins/PostProcessingPlugin/scripts/CreateThumbnail.py2
-rw-r--r--plugins/SimulationView/SimulationView.py6
-rw-r--r--plugins/SimulationView/SimulationViewProxy.py2
-rw-r--r--plugins/SimulationView/__init__.py4
-rwxr-xr-xplugins/SliceInfoPlugin/SliceInfo.py8
-rw-r--r--plugins/SolidView/SolidView.py4
-rw-r--r--plugins/SupportEraser/SupportEraser.py6
-rw-r--r--plugins/Toolbox/resources/qml/components/ToolboxDownloadsGridTile.qml2
-rw-r--r--plugins/Toolbox/resources/qml/components/ToolboxHeader.qml2
-rw-r--r--plugins/Toolbox/src/AuthorsModel.py18
-rw-r--r--plugins/Toolbox/src/CloudSync/CloudPackageChecker.py8
-rw-r--r--plugins/Toolbox/src/CloudSync/DiscrepanciesPresenter.py2
-rw-r--r--plugins/Toolbox/src/CloudSync/DownloadPresenter.py2
-rw-r--r--plugins/Toolbox/src/CloudSync/LicenseModel.py2
-rw-r--r--plugins/Toolbox/src/CloudSync/LicensePresenter.py2
-rw-r--r--plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py12
-rw-r--r--plugins/Toolbox/src/ConfigsModel.py12
-rw-r--r--plugins/Toolbox/src/PackagesModel.py46
-rw-r--r--plugins/Toolbox/src/Toolbox.py10
-rw-r--r--plugins/UFPWriter/UFPWriter.py2
-rw-r--r--plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py10
-rw-r--r--plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py8
-rw-r--r--plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py4
-rw-r--r--plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py6
-rw-r--r--plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py4
-rw-r--r--plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py4
-rw-r--r--plugins/UM3NetworkPrinting/src/Models/ConfigurationChangeModel.py2
-rw-r--r--plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterStatus.py2
-rw-r--r--plugins/UM3NetworkPrinting/src/Models/UM3PrintJobOutputModel.py8
-rw-r--r--plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py12
-rw-r--r--plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py6
-rw-r--r--plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py4
-rw-r--r--plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py2
-rw-r--r--plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterOutputDevice.py2
-rw-r--r--plugins/USBPrinting/USBPrinterOutputDeviceManager.py5
-rw-r--r--plugins/UltimakerMachineActions/UMOUpgradeSelection.py2
-rw-r--r--plugins/VersionUpgrade/VersionUpgrade44to45/VersionUpgrade44to45.py18
-rw-r--r--plugins/XRayView/XRayView.py2
-rw-r--r--plugins/XmlMaterialProfile/PluginInfo.py2
-rw-r--r--resources/qml/Cura.qml2
-rw-r--r--resources/qml/Preferences/Materials/MaterialsSyncDialog.qml2
-rw-r--r--resources/qml/Preferences/Materials/MaterialsView.qml34
-rw-r--r--resources/qml/Settings/SettingItem.qml2
-rw-r--r--resources/qml/WelcomePages/WhatsNewContent.qml2
-rw-r--r--tests/PrinterOutput/TestNetworkedPrinterOutputDevice.py12
-rw-r--r--tests/Settings/TestContainerManager.py2
-rw-r--r--tests/TestOAuth2.py4
154 files changed, 502 insertions, 494 deletions
diff --git a/cura/API/Account.py b/cura/API/Account.py
index 9f1184a0a0..993e53e539 100644
--- a/cura/API/Account.py
+++ b/cura/API/Account.py
@@ -1,8 +1,8 @@
# Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-
+import enum
from datetime import datetime
-from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot, pyqtProperty, QTimer, Q_ENUMS
+from PyQt6.QtCore import QObject, pyqtSignal, pyqtSlot, pyqtProperty, QTimer, pyqtEnum
from typing import Any, Optional, Dict, TYPE_CHECKING, Callable
from UM.Logger import Logger
@@ -18,7 +18,7 @@ if TYPE_CHECKING:
i18n_catalog = i18nCatalog("cura")
-class SyncState:
+class SyncState(enum.IntEnum):
"""QML: Cura.AccountSyncState"""
SYNCING = 0
SUCCESS = 1
@@ -41,7 +41,7 @@ class Account(QObject):
# The interval in which sync services are automatically triggered
SYNC_INTERVAL = 60.0 # seconds
- Q_ENUMS(SyncState)
+ pyqtEnum(SyncState)
loginStateChanged = pyqtSignal(bool)
"""Signal emitted when user logged in or out"""
diff --git a/cura/API/ConnectionStatus.py b/cura/API/ConnectionStatus.py
index 36f804e3cf..bcdddb717a 100644
--- a/cura/API/ConnectionStatus.py
+++ b/cura/API/ConnectionStatus.py
@@ -1,6 +1,6 @@
from typing import Optional
-from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty
+from PyQt6.QtCore import QObject, pyqtSignal, pyqtProperty
from UM.TaskManagement.HttpRequestManager import HttpRequestManager
diff --git a/cura/API/__init__.py b/cura/API/__init__.py
index 447be98e4b..f5ffeb92f0 100644
--- a/cura/API/__init__.py
+++ b/cura/API/__init__.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Optional, TYPE_CHECKING
-from PyQt5.QtCore import QObject, pyqtProperty
+from PyQt6.QtCore import QObject, pyqtProperty
from cura.API.Backups import Backups
from cura.API.ConnectionStatus import ConnectionStatus
@@ -34,12 +34,13 @@ class CuraAPI(QObject):
raise RuntimeError("Tried to create singleton '{class_name}' more than once.".format(class_name = CuraAPI.__name__))
if application is None:
raise RuntimeError("Upon first time creation, the application must be set.")
- cls.__instance = super(CuraAPI, cls).__new__(cls)
+ instance = super(CuraAPI, cls).__new__(cls)
cls._application = application
- return cls.__instance
+ return instance
def __init__(self, application: Optional["CuraApplication"] = None) -> None:
super().__init__(parent = CuraAPI._application)
+ CuraAPI.__instance = self
self._account = Account(self._application)
diff --git a/cura/AutoSave.py b/cura/AutoSave.py
index 3205f48af1..c8ea9b756f 100644
--- a/cura/AutoSave.py
+++ b/cura/AutoSave.py
@@ -1,7 +1,7 @@
# Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import QTimer
+from PyQt6.QtCore import QTimer
from typing import Any, TYPE_CHECKING
from UM.Logger import Logger
diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py
index fc5691f034..372d6152fc 100755
--- a/cura/BuildVolume.py
+++ b/cura/BuildVolume.py
@@ -31,7 +31,7 @@ from cura.Settings.GlobalStack import GlobalStack
from cura.Scene.CuraSceneNode import CuraSceneNode
from cura.Settings.ExtruderManager import ExtruderManager
-from PyQt5.QtCore import QTimer
+from PyQt6.QtCore import QTimer
if TYPE_CHECKING:
diff --git a/cura/CameraAnimation.py b/cura/CameraAnimation.py
index 37f230a30d..699655a31e 100644
--- a/cura/CameraAnimation.py
+++ b/cura/CameraAnimation.py
@@ -2,8 +2,8 @@
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import QVariantAnimation, QEasingCurve
-from PyQt5.QtGui import QVector3D
+from PyQt6.QtCore import QVariantAnimation, QEasingCurve
+from PyQt6.QtGui import QVector3D
from UM.Math.Vector import Vector
@@ -13,7 +13,7 @@ class CameraAnimation(QVariantAnimation):
super().__init__(parent)
self._camera_tool = None
self.setDuration(300)
- self.setEasingCurve(QEasingCurve.OutQuad)
+ self.setEasingCurve(QEasingCurve.Type.OutQuad)
def setCameraTool(self, camera_tool):
self._camera_tool = camera_tool
diff --git a/cura/CrashHandler.py b/cura/CrashHandler.py
index db44daa77c..f5ce13e04b 100644
--- a/cura/CrashHandler.py
+++ b/cura/CrashHandler.py
@@ -20,9 +20,9 @@ try:
except ImportError:
with_sentry_sdk = False
-from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, QUrl
-from PyQt5.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QTextEdit, QGroupBox, QCheckBox, QPushButton
-from PyQt5.QtGui import QDesktopServices
+from PyQt6.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, QUrl
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QVBoxLayout, QLabel, QTextEdit, QGroupBox, QCheckBox, QPushButton
+from PyQt6.QtGui import QDesktopServices
from UM.Application import Application
from UM.Logger import Logger
@@ -136,8 +136,8 @@ class CrashHandler:
# "backup and start clean" and "close" buttons
buttons = QDialogButtonBox()
- buttons.addButton(QDialogButtonBox.Close)
- buttons.addButton(catalog.i18nc("@action:button", "Backup and Reset Configuration"), QDialogButtonBox.AcceptRole)
+ buttons.addButton(QDialogButtonBox.StandardButton.Close)
+ buttons.addButton(catalog.i18nc("@action:button", "Backup and Reset Configuration"), QDialogButtonBox.ButtonRole.AcceptRole)
buttons.rejected.connect(self._closeEarlyCrashDialog)
buttons.accepted.connect(self._backupAndStartClean)
@@ -161,7 +161,7 @@ class CrashHandler:
QDesktopServices.openUrl(QUrl.fromLocalFile( path ))
def _showDetailedReport(self):
- self.dialog.exec_()
+ self.dialog.exec()
def _createDialog(self):
"""Creates a modal dialog."""
@@ -409,12 +409,12 @@ class CrashHandler:
def _buttonsWidget(self):
buttons = QDialogButtonBox()
- buttons.addButton(QDialogButtonBox.Close)
+ buttons.addButton(QDialogButtonBox.StandardButton.Close)
# Like above, this will be served as a separate detailed report dialog if the application has not yet been
# fully loaded. In this case, "send report" will be a check box in the early crash dialog, so there is no
# need for this extra button.
if self.has_started:
- buttons.addButton(catalog.i18nc("@action:button", "Send report"), QDialogButtonBox.AcceptRole)
+ buttons.addButton(catalog.i18nc("@action:button", "Send report"), QDialogButtonBox.ButtonRole.AcceptRole)
buttons.accepted.connect(self._sendCrashReport)
buttons.rejected.connect(self.dialog.close)
@@ -449,5 +449,5 @@ class CrashHandler:
def _show(self):
# When the exception is in the skip_exception_types list, the dialog is not created, so we don't need to show it
if self.dialog:
- self.dialog.exec_()
+ self.dialog.exec()
os._exit(1)
diff --git a/cura/CuraActions.py b/cura/CuraActions.py
index 8b232ad1bf..193803325f 100644
--- a/cura/CuraActions.py
+++ b/cura/CuraActions.py
@@ -1,8 +1,8 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import QObject, QUrl
-from PyQt5.QtGui import QDesktopServices
+from PyQt6.QtCore import QObject, QUrl
+from PyQt6.QtGui import QDesktopServices
from typing import List, cast
from UM.Event import CallFunctionEvent
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index ebd1708bf5..6eea5eaefe 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -1,6 +1,6 @@
# Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-
+import enum
import os
import sys
import tempfile
@@ -8,10 +8,10 @@ import time
from typing import cast, TYPE_CHECKING, Optional, Callable, List, Any, Dict
import numpy
-from PyQt5.QtCore import QObject, QTimer, QUrl, pyqtSignal, pyqtProperty, QEvent, Q_ENUMS
-from PyQt5.QtGui import QColor, QIcon
-from PyQt5.QtQml import qmlRegisterUncreatableType, qmlRegisterSingletonType, qmlRegisterType
-from PyQt5.QtWidgets import QMessageBox
+from PyQt6.QtCore import QObject, QTimer, QUrl, pyqtSignal, pyqtProperty, QEvent, pyqtEnum
+from PyQt6.QtGui import QColor, QIcon
+from PyQt6.QtQml import qmlRegisterUncreatableType, qmlRegisterUncreatableMetaObject, qmlRegisterSingletonType, qmlRegisterType
+from PyQt6.QtWidgets import QMessageBox
import UM.Util
import cura.Settings.cura_empty_instance_containers
@@ -133,7 +133,7 @@ class CuraApplication(QtApplication):
Created = False
- class ResourceTypes:
+ class ResourceTypes(enum.IntEnum):
QmlFiles = Resources.UserType + 1
Firmware = Resources.UserType + 2
QualityInstanceContainer = Resources.UserType + 3
@@ -147,7 +147,7 @@ class CuraApplication(QtApplication):
SettingVisibilityPreset = Resources.UserType + 11
IntentInstanceContainer = Resources.UserType + 12
- Q_ENUMS(ResourceTypes)
+ pyqtEnum(ResourceTypes)
def __init__(self, *args, **kwargs):
super().__init__(name = ApplicationMetadata.CuraAppName,
@@ -682,8 +682,8 @@ class CuraApplication(QtApplication):
def messageBox(self, title, text,
informativeText = "",
detailedText = "",
- buttons = QMessageBox.Ok,
- icon = QMessageBox.NoIcon,
+ buttons = QMessageBox.StandardButton.Ok,
+ icon = QMessageBox.Icon.NoIcon,
callback = None,
callback_arguments = []
):
@@ -870,7 +870,7 @@ class CuraApplication(QtApplication):
self._auto_save = AutoSave(self)
self._auto_save.initialize()
- self.exec_()
+ self.exec()
def __setUpSingleInstanceServer(self):
if self._use_single_instance:
@@ -1087,7 +1087,7 @@ class CuraApplication(QtApplication):
def event(self, event):
"""Handle Qt events"""
- if event.type() == QEvent.FileOpen:
+ if event.type() == QEvent.Type.FileOpen:
if self._plugins_loaded:
self._openFile(event.file())
else:
@@ -1133,16 +1133,16 @@ class CuraApplication(QtApplication):
engine.rootContext().setContextProperty("CuraSDKVersion", ApplicationMetadata.CuraSDKVersion)
self.processEvents()
- qmlRegisterUncreatableType(CuraApplication, "Cura", 1, 0, "ResourceTypes", "Just an Enum type")
+ qmlRegisterUncreatableMetaObject(CuraApplication.staticMetaObject, "Cura", 1, 0, "ResourceTypes", "ResourceTypes is an enum-only type")
self.processEvents()
- qmlRegisterSingletonType(CuraSceneController, "Cura", 1, 0, "SceneController", self.getCuraSceneController)
- qmlRegisterSingletonType(ExtruderManager, "Cura", 1, 0, "ExtruderManager", self.getExtruderManager)
- qmlRegisterSingletonType(MachineManager, "Cura", 1, 0, "MachineManager", self.getMachineManager)
- qmlRegisterSingletonType(IntentManager, "Cura", 1, 6, "IntentManager", self.getIntentManager)
- qmlRegisterSingletonType(SettingInheritanceManager, "Cura", 1, 0, "SettingInheritanceManager", self.getSettingInheritanceManager)
- qmlRegisterSingletonType(SimpleModeSettingsManager, "Cura", 1, 0, "SimpleModeSettingsManager", self.getSimpleModeSettingsManager)
- qmlRegisterSingletonType(MachineActionManager.MachineActionManager, "Cura", 1, 0, "MachineActionManager", self.getMachineActionManager)
+ qmlRegisterSingletonType(CuraSceneController, "Cura", 1, 0, self.getCuraSceneController, "SceneController")
+ qmlRegisterSingletonType(ExtruderManager, "Cura", 1, 0, self.getExtruderManager, "ExtruderManager")
+ qmlRegisterSingletonType(MachineManager, "Cura", 1, 0, self.getMachineManager, "MachineManager")
+ qmlRegisterSingletonType(IntentManager, "Cura", 1, 6, self.getIntentManager, "IntentManager")
+ qmlRegisterSingletonType(SettingInheritanceManager, "Cura", 1, 0, self.getSettingInheritanceManager, "SettingInheritanceManager")
+ qmlRegisterSingletonType(SimpleModeSettingsManager, "Cura", 1, 0, self.getSimpleModeSettingsManager, "SimpleModeSettingsManager")
+ qmlRegisterSingletonType(MachineActionManager.MachineActionManager, "Cura", 1, 0, self.getMachineActionManager, "MachineActionManager")
self.processEvents()
qmlRegisterType(NetworkingUtil, "Cura", 1, 5, "NetworkingUtil")
@@ -1165,16 +1165,16 @@ class CuraApplication(QtApplication):
qmlRegisterType(FavoriteMaterialsModel, "Cura", 1, 0, "FavoriteMaterialsModel")
qmlRegisterType(GenericMaterialsModel, "Cura", 1, 0, "GenericMaterialsModel")
qmlRegisterType(MaterialBrandsModel, "Cura", 1, 0, "MaterialBrandsModel")
- qmlRegisterSingletonType(QualityManagementModel, "Cura", 1, 0, "QualityManagementModel", self.getQualityManagementModel)
- qmlRegisterSingletonType(MaterialManagementModel, "Cura", 1, 5, "MaterialManagementModel", self.getMaterialManagementModel)
+ qmlRegisterSingletonType(QualityManagementModel, "Cura", 1, 0, self.getQualityManagementModel, "QualityManagementModel")
+ qmlRegisterSingletonType(MaterialManagementModel, "Cura", 1, 5, self.getMaterialManagementModel, "MaterialManagementModel")
self.processEvents()
qmlRegisterType(DiscoveredPrintersModel, "Cura", 1, 0, "DiscoveredPrintersModel")
qmlRegisterType(DiscoveredCloudPrintersModel, "Cura", 1, 7, "DiscoveredCloudPrintersModel")
qmlRegisterSingletonType(QualityProfilesDropDownMenuModel, "Cura", 1, 0,
- "QualityProfilesDropDownMenuModel", self.getQualityProfilesDropDownMenuModel)
+ self.getQualityProfilesDropDownMenuModel, "QualityProfilesDropDownMenuModel")
qmlRegisterSingletonType(CustomQualityProfilesDropDownMenuModel, "Cura", 1, 0,
- "CustomQualityProfilesDropDownMenuModel", self.getCustomQualityProfilesDropDownMenuModel)
+ self.getCustomQualityProfilesDropDownMenuModel, "CustomQualityProfilesDropDownMenuModel")
qmlRegisterType(NozzleModel, "Cura", 1, 0, "NozzleModel")
qmlRegisterType(IntentModel, "Cura", 1, 6, "IntentModel")
qmlRegisterType(IntentCategoryModel, "Cura", 1, 6, "IntentCategoryModel")
@@ -1186,14 +1186,14 @@ class CuraApplication(QtApplication):
qmlRegisterType(FirstStartMachineActionsModel, "Cura", 1, 0, "FirstStartMachineActionsModel")
qmlRegisterType(MachineNameValidator, "Cura", 1, 0, "MachineNameValidator")
qmlRegisterType(UserChangesModel, "Cura", 1, 0, "UserChangesModel")
- qmlRegisterSingletonType(ContainerManager, "Cura", 1, 0, "ContainerManager", ContainerManager.getInstance)
+ qmlRegisterSingletonType(ContainerManager, "Cura", 1, 0, ContainerManager.getInstance, "ContainerManager")
qmlRegisterType(SidebarCustomMenuItemsModel, "Cura", 1, 0, "SidebarCustomMenuItemsModel")
qmlRegisterType(PrinterOutputDevice, "Cura", 1, 0, "PrinterOutputDevice")
from cura.API import CuraAPI
- qmlRegisterSingletonType(CuraAPI, "Cura", 1, 1, "API", self.getCuraAPI)
- qmlRegisterUncreatableType(Account, "Cura", 1, 0, "AccountSyncState", "Could not create AccountSyncState")
+ qmlRegisterSingletonType(CuraAPI, "Cura", 1, 1, self.getCuraAPI, "API")
+ qmlRegisterUncreatableMetaObject(CuraApplication.staticMetaObject, "Cura", 1, 0, "AccountSyncState", "AccountSyncState is an enum-only type")
# As of Qt5.7, it is necessary to get rid of any ".." in the path for the singleton to work.
actions_url = QUrl.fromLocalFile(os.path.abspath(Resources.getPath(CuraApplication.ResourceTypes.QmlFiles, "Actions.qml")))
diff --git a/cura/CuraPackageManager.py b/cura/CuraPackageManager.py
index 26d6591099..212993e19b 100644
--- a/cura/CuraPackageManager.py
+++ b/cura/CuraPackageManager.py
@@ -11,7 +11,7 @@ from UM.Resources import Resources #To find storage paths for some resource type
if TYPE_CHECKING:
from UM.Qt.QtApplication import QtApplication
- from PyQt5.QtCore import QObject
+ from PyQt6.QtCore import QObject
class CuraPackageManager(PackageManager):
diff --git a/cura/CuraView.py b/cura/CuraView.py
index 86d4254a7d..6b20cf18d3 100644
--- a/cura/CuraView.py
+++ b/cura/CuraView.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import pyqtProperty, QUrl
+from PyQt6.QtCore import pyqtProperty, QUrl
from UM.Resources import Resources
from UM.View.View import View
diff --git a/cura/MachineAction.py b/cura/MachineAction.py
index 74b742ef4d..15d9ab1ca1 100644
--- a/cura/MachineAction.py
+++ b/cura/MachineAction.py
@@ -4,7 +4,7 @@
import os
from typing import Optional
-from PyQt5.QtCore import QObject, QUrl, pyqtSlot, pyqtProperty, pyqtSignal
+from PyQt6.QtCore import QObject, QUrl, pyqtSlot, pyqtProperty, pyqtSignal
from UM.Logger import Logger
from UM.PluginObject import PluginObject
diff --git a/cura/Machines/MachineErrorChecker.py b/cura/Machines/MachineErrorChecker.py
index 8213734348..bfefe80fa5 100644
--- a/cura/Machines/MachineErrorChecker.py
+++ b/cura/Machines/MachineErrorChecker.py
@@ -5,7 +5,7 @@ import time
from collections import deque
-from PyQt5.QtCore import QObject, QTimer, pyqtSignal, pyqtProperty
+from PyQt6.QtCore import QObject, QTimer, pyqtSignal, pyqtProperty
from typing import Optional, Any, Set
from UM.Logger import Logger
diff --git a/cura/Machines/MachineNode.py b/cura/Machines/MachineNode.py
index d4706ae5ef..88736826fd 100644
--- a/cura/Machines/MachineNode.py
+++ b/cura/Machines/MachineNode.py
@@ -129,7 +129,7 @@ class MachineNode(ContainerNode):
if name not in groups_by_name:
# CURA-6599
# For some reason, QML will get null or fail to convert type for MachineManager.activeQualityChangesGroup() to
- # a QObject. Setting the object ownership to QQmlEngine.CppOwnership doesn't work, but setting the object
+ # a QObject. Setting the object ownership to QQmlEngine.ObjectOwnership.CppOwnership doesn't work, but setting the object
# parent to application seems to work.
from cura.CuraApplication import CuraApplication
groups_by_name[name] = QualityChangesGroup(name, quality_type = quality_changes["quality_type"],
diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py
index 776d540867..2521d3686d 100644
--- a/cura/Machines/Models/BaseMaterialsModel.py
+++ b/cura/Machines/Models/BaseMaterialsModel.py
@@ -3,7 +3,7 @@
from typing import Dict, Set
-from PyQt5.QtCore import Qt, QTimer, pyqtSignal, pyqtProperty
+from PyQt6.QtCore import Qt, QTimer, pyqtSignal, pyqtProperty
from UM.Qt.ListModel import ListModel
from UM.Logger import Logger
@@ -61,22 +61,22 @@ class BaseMaterialsModel(ListModel):
ContainerTree.getInstance().materialsChanged.connect(self._materialsListChanged)
self._application.getMaterialManagementModel().favoritesChanged.connect(self._onChanged)
- self.addRoleName(Qt.UserRole + 1, "root_material_id")
- self.addRoleName(Qt.UserRole + 2, "id")
- self.addRoleName(Qt.UserRole + 3, "GUID")
- self.addRoleName(Qt.UserRole + 4, "name")
- self.addRoleName(Qt.UserRole + 5, "brand")
- self.addRoleName(Qt.UserRole + 6, "description")
- self.addRoleName(Qt.UserRole + 7, "material")
- self.addRoleName(Qt.UserRole + 8, "color_name")
- self.addRoleName(Qt.UserRole + 9, "color_code")
- self.addRoleName(Qt.UserRole + 10, "density")
- self.addRoleName(Qt.UserRole + 11, "diameter")
- self.addRoleName(Qt.UserRole + 12, "approximate_diameter")
- self.addRoleName(Qt.UserRole + 13, "adhesion_info")
- self.addRoleName(Qt.UserRole + 14, "is_read_only")
- self.addRoleName(Qt.UserRole + 15, "container_node")
- self.addRoleName(Qt.UserRole + 16, "is_favorite")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 1, "root_material_id")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 2, "id")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 3, "GUID")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 4, "name")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 5, "brand")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 6, "description")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 7, "material")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 8, "color_name")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 9, "color_code")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 10, "density")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 11, "diameter")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 12, "approximate_diameter")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 13, "adhesion_info")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 14, "is_read_only")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 15, "container_node")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 16, "is_favorite")
def _onChanged(self) -> None:
self._update_timer.start()
diff --git a/cura/Machines/Models/BuildPlateModel.py b/cura/Machines/Models/BuildPlateModel.py
index 3697dd2762..716792ceb6 100644
--- a/cura/Machines/Models/BuildPlateModel.py
+++ b/cura/Machines/Models/BuildPlateModel.py
@@ -1,14 +1,14 @@
# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import Qt
+from PyQt6.QtCore import Qt
from UM.Logger import Logger
from UM.Qt.ListModel import ListModel
class BuildPlateModel(ListModel):
- NameRole = Qt.UserRole + 1
- ContainerNodeRole = Qt.UserRole + 2
+ NameRole = Qt.ItemDataRole.UserRole + 1
+ ContainerNodeRole = Qt.ItemDataRole.UserRole + 2
def __init__(self, parent = None):
super().__init__(parent)
diff --git a/cura/Machines/Models/CustomQualityProfilesDropDownMenuModel.py b/cura/Machines/Models/CustomQualityProfilesDropDownMenuModel.py
index ce4b87da2b..54f0e44a2a 100644
--- a/cura/Machines/Models/CustomQualityProfilesDropDownMenuModel.py
+++ b/cura/Machines/Models/CustomQualityProfilesDropDownMenuModel.py
@@ -10,7 +10,7 @@ from cura.Machines.ContainerTree import ContainerTree
from cura.Machines.Models.QualityProfilesDropDownMenuModel import QualityProfilesDropDownMenuModel
if TYPE_CHECKING:
- from PyQt5.QtCore import QObject
+ from PyQt6.QtCore import QObject
from UM.Settings.Interfaces import ContainerInterface
diff --git a/cura/Machines/Models/DiscoveredCloudPrintersModel.py b/cura/Machines/Models/DiscoveredCloudPrintersModel.py
index 692ed49593..c6935b2e34 100644
--- a/cura/Machines/Models/DiscoveredCloudPrintersModel.py
+++ b/cura/Machines/Models/DiscoveredCloudPrintersModel.py
@@ -1,6 +1,6 @@
from typing import Optional, TYPE_CHECKING, List, Dict
-from PyQt5.QtCore import QObject, pyqtSlot, Qt, pyqtSignal, pyqtProperty
+from PyQt6.QtCore import QObject, pyqtSlot, Qt, pyqtSignal, pyqtProperty
from UM.Qt.ListModel import ListModel
@@ -12,10 +12,10 @@ class DiscoveredCloudPrintersModel(ListModel):
"""Model used to inform the application about newly added cloud printers, which are discovered from the user's
account """
- DeviceKeyRole = Qt.UserRole + 1
- DeviceNameRole = Qt.UserRole + 2
- DeviceTypeRole = Qt.UserRole + 3
- DeviceFirmwareVersionRole = Qt.UserRole + 4
+ DeviceKeyRole = Qt.ItemDataRole.UserRole + 1
+ DeviceNameRole = Qt.ItemDataRole.UserRole + 2
+ DeviceTypeRole = Qt.ItemDataRole.UserRole + 3
+ DeviceFirmwareVersionRole = Qt.ItemDataRole.UserRole + 4
cloudPrintersDetectedChanged = pyqtSignal(bool)
diff --git a/cura/Machines/Models/DiscoveredPrintersModel.py b/cura/Machines/Models/DiscoveredPrintersModel.py
index 459ec4d795..4c245a927a 100644
--- a/cura/Machines/Models/DiscoveredPrintersModel.py
+++ b/cura/Machines/Models/DiscoveredPrintersModel.py
@@ -3,7 +3,7 @@
from typing import Callable, Dict, List, Optional, TYPE_CHECKING
-from PyQt5.QtCore import pyqtSlot, pyqtProperty, pyqtSignal, QObject, QTimer
+from PyQt6.QtCore import pyqtSlot, pyqtProperty, pyqtSignal, QObject, QTimer
from UM.i18n import i18nCatalog
from UM.Logger import Logger
diff --git a/cura/Machines/Models/ExtrudersModel.py b/cura/Machines/Models/ExtrudersModel.py
index 5ae3c19874..2677894bff 100644
--- a/cura/Machines/Models/ExtrudersModel.py
+++ b/cura/Machines/Models/ExtrudersModel.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty, QTimer
+from PyQt6.QtCore import Qt, pyqtSignal, pyqtProperty, QTimer
from typing import Iterable, TYPE_CHECKING
from UM.i18n import i18nCatalog
@@ -23,43 +23,43 @@ class ExtrudersModel(ListModel):
"""
# The ID of the container stack for the extruder.
- IdRole = Qt.UserRole + 1
+ IdRole = Qt.ItemDataRole.UserRole + 1
- NameRole = Qt.UserRole + 2
+ NameRole = Qt.ItemDataRole.UserRole + 2
"""Human-readable name of the extruder."""
- ColorRole = Qt.UserRole + 3
+ ColorRole = Qt.ItemDataRole.UserRole + 3
"""Colour of the material loaded in the extruder."""
- IndexRole = Qt.UserRole + 4
+ IndexRole = Qt.ItemDataRole.UserRole + 4
"""Index of the extruder, which is also the value of the setting itself.
An index of 0 indicates the first extruder, an index of 1 the second one, and so on. This is the value that will
be saved in instance containers. """
# The ID of the definition of the extruder.
- DefinitionRole = Qt.UserRole + 5
+ DefinitionRole = Qt.ItemDataRole.UserRole + 5
# The material of the extruder.
- MaterialRole = Qt.UserRole + 6
+ MaterialRole = Qt.ItemDataRole.UserRole + 6
# The variant of the extruder.
- VariantRole = Qt.UserRole + 7
- StackRole = Qt.UserRole + 8
+ VariantRole = Qt.ItemDataRole.UserRole + 7
+ StackRole = Qt.ItemDataRole.UserRole + 8
- MaterialBrandRole = Qt.UserRole + 9
- ColorNameRole = Qt.UserRole + 10
+ MaterialBrandRole = Qt.ItemDataRole.UserRole + 9
+ ColorNameRole = Qt.ItemDataRole.UserRole + 10
- EnabledRole = Qt.UserRole + 11
+ EnabledRole = Qt.ItemDataRole.UserRole + 11
"""Is the extruder enabled?"""
- MaterialTypeRole = Qt.UserRole + 12
+ MaterialTypeRole = Qt.ItemDataRole.UserRole + 12
"""The type of the material (e.g. PLA, ABS, PETG, etc.)."""
defaultColors = ["#ffc924", "#86ec21", "#22eeee", "#245bff", "#9124ff", "#ff24c8"]
"""List of colours to display if there is no material or the material has no known colour. """
- MaterialNameRole = Qt.UserRole + 13
+ MaterialNameRole = Qt.ItemDataRole.UserRole + 13
def __init__(self, parent = None):
"""Initialises the extruders model, defining the roles and listening for changes in the data.
diff --git a/cura/Machines/Models/FirstStartMachineActionsModel.py b/cura/Machines/Models/FirstStartMachineActionsModel.py
index 7d83f0bff2..b9a1a7cf04 100644
--- a/cura/Machines/Models/FirstStartMachineActionsModel.py
+++ b/cura/Machines/Models/FirstStartMachineActionsModel.py
@@ -3,7 +3,7 @@
from typing import Optional, Dict, Any, TYPE_CHECKING
-from PyQt5.QtCore import QObject, Qt, pyqtProperty, pyqtSignal, pyqtSlot
+from PyQt6.QtCore import QObject, Qt, pyqtProperty, pyqtSignal, pyqtSlot
from UM.Qt.ListModel import ListModel
@@ -19,9 +19,9 @@ class FirstStartMachineActionsModel(ListModel):
- action : the MachineAction object itself
"""
- TitleRole = Qt.UserRole + 1
- ContentRole = Qt.UserRole + 2
- ActionRole = Qt.UserRole + 3
+ TitleRole = Qt.ItemDataRole.UserRole + 1
+ ContentRole = Qt.ItemDataRole.UserRole + 2
+ ActionRole = Qt.ItemDataRole.UserRole + 3
def __init__(self, application: "CuraApplication", parent: Optional[QObject] = None) -> None:
super().__init__(parent)
diff --git a/cura/Machines/Models/GlobalStacksModel.py b/cura/Machines/Models/GlobalStacksModel.py
index f27a1ec00b..033d89952c 100644
--- a/cura/Machines/Models/GlobalStacksModel.py
+++ b/cura/Machines/Models/GlobalStacksModel.py
@@ -1,7 +1,7 @@
# Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import Qt, QTimer, pyqtProperty, pyqtSignal
+from PyQt6.QtCore import Qt, QTimer, pyqtProperty, pyqtSignal
from typing import List, Optional
from UM.Qt.ListModel import ListModel
@@ -15,14 +15,14 @@ from cura.UltimakerCloud.UltimakerCloudConstants import META_CAPABILITIES # To
class GlobalStacksModel(ListModel):
- NameRole = Qt.UserRole + 1
- IdRole = Qt.UserRole + 2
- HasRemoteConnectionRole = Qt.UserRole + 3
- ConnectionTypeRole = Qt.UserRole + 4
- MetaDataRole = Qt.UserRole + 5
- DiscoverySourceRole = Qt.UserRole + 6 # For separating local and remote printers in the machine management page
- RemovalWarningRole = Qt.UserRole + 7
- IsOnlineRole = Qt.UserRole + 8
+ NameRole = Qt.ItemDataRole.UserRole + 1
+ IdRole = Qt.ItemDataRole.UserRole + 2
+ HasRemoteConnectionRole = Qt.ItemDataRole.UserRole + 3
+ ConnectionTypeRole = Qt.ItemDataRole.UserRole + 4
+ MetaDataRole = Qt.ItemDataRole.UserRole + 5
+ DiscoverySourceRole = Qt.ItemDataRole.UserRole + 6 # For separating local and remote printers in the machine management page
+ RemovalWarningRole = Qt.ItemDataRole.UserRole + 7
+ IsOnlineRole = Qt.ItemDataRole.UserRole + 8
def __init__(self, parent = None) -> None:
super().__init__(parent)
diff --git a/cura/Machines/Models/IntentCategoryModel.py b/cura/Machines/Models/IntentCategoryModel.py
index aeb1f878ca..14e3c4d35e 100644
--- a/cura/Machines/Models/IntentCategoryModel.py
+++ b/cura/Machines/Models/IntentCategoryModel.py
@@ -2,14 +2,14 @@
#Cura is released under the terms of the LGPLv3 or higher.
import collections
-from PyQt5.QtCore import Qt, QTimer
+from PyQt6.QtCore import Qt, QTimer
from typing import TYPE_CHECKING, Optional, Dict
from cura.Machines.Models.IntentModel import IntentModel
from cura.Settings.IntentManager import IntentManager
from UM.Qt.ListModel import ListModel
from UM.Settings.ContainerRegistry import ContainerRegistry #To update the list if anything changes.
-from PyQt5.QtCore import pyqtSignal
+from PyQt6.QtCore import pyqtSignal
import cura.CuraApplication
if TYPE_CHECKING:
from UM.Settings.ContainerRegistry import ContainerInterface
@@ -21,11 +21,11 @@ catalog = i18nCatalog("cura")
class IntentCategoryModel(ListModel):
"""Lists the intent categories that are available for the current printer configuration. """
- NameRole = Qt.UserRole + 1
- IntentCategoryRole = Qt.UserRole + 2
- WeightRole = Qt.UserRole + 3
- QualitiesRole = Qt.UserRole + 4
- DescriptionRole = Qt.UserRole + 5
+ NameRole = Qt.ItemDataRole.UserRole + 1
+ IntentCategoryRole = Qt.ItemDataRole.UserRole + 2
+ WeightRole = Qt.ItemDataRole.UserRole + 3
+ QualitiesRole = Qt.ItemDataRole.UserRole + 4
+ DescriptionRole = Qt.ItemDataRole.UserRole + 5
modelUpdated = pyqtSignal()
diff --git a/cura/Machines/Models/IntentModel.py b/cura/Machines/Models/IntentModel.py
index 0ec7e268f0..9fb8ff0376 100644
--- a/cura/Machines/Models/IntentModel.py
+++ b/cura/Machines/Models/IntentModel.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Optional, Dict, Any, Set, List
-from PyQt5.QtCore import Qt, QObject, pyqtProperty, pyqtSignal, QTimer
+from PyQt6.QtCore import Qt, QObject, pyqtProperty, pyqtSignal, QTimer
import cura.CuraApplication
from UM.Qt.ListModel import ListModel
@@ -15,11 +15,11 @@ from cura.Machines.QualityGroup import QualityGroup
class IntentModel(ListModel):
- NameRole = Qt.UserRole + 1
- QualityTypeRole = Qt.UserRole + 2
- LayerHeightRole = Qt.UserRole + 3
- AvailableRole = Qt.UserRole + 4
- IntentRole = Qt.UserRole + 5
+ NameRole = Qt.ItemDataRole.UserRole + 1
+ QualityTypeRole = Qt.ItemDataRole.UserRole + 2
+ LayerHeightRole = Qt.ItemDataRole.UserRole + 3
+ AvailableRole = Qt.ItemDataRole.UserRole + 4
+ IntentRole = Qt.ItemDataRole.UserRole + 5
def __init__(self, parent: Optional[QObject] = None) -> None:
super().__init__(parent)
diff --git a/cura/Machines/Models/MaterialBrandsModel.py b/cura/Machines/Models/MaterialBrandsModel.py
index b0594cb286..42554ca05f 100644
--- a/cura/Machines/Models/MaterialBrandsModel.py
+++ b/cura/Machines/Models/MaterialBrandsModel.py
@@ -1,7 +1,7 @@
# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import Qt, pyqtSignal
+from PyQt6.QtCore import Qt, pyqtSignal
from UM.Qt.ListModel import ListModel
from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel
@@ -10,9 +10,9 @@ class MaterialTypesModel(ListModel):
def __init__(self, parent = None):
super().__init__(parent)
- self.addRoleName(Qt.UserRole + 1, "name")
- self.addRoleName(Qt.UserRole + 2, "brand")
- self.addRoleName(Qt.UserRole + 3, "colors")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 1, "name")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 2, "brand")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 3, "colors")
class MaterialBrandsModel(BaseMaterialsModel):
@@ -21,8 +21,8 @@ class MaterialBrandsModel(BaseMaterialsModel):
def __init__(self, parent = None):
super().__init__(parent)
- self.addRoleName(Qt.UserRole + 1, "name")
- self.addRoleName(Qt.UserRole + 2, "material_types")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 1, "name")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 2, "material_types")
self._update()
diff --git a/cura/Machines/Models/MaterialManagementModel.py b/cura/Machines/Models/MaterialManagementModel.py
index 76b2c5b444..ab904573c2 100644
--- a/cura/Machines/Models/MaterialManagementModel.py
+++ b/cura/Machines/Models/MaterialManagementModel.py
@@ -2,8 +2,8 @@
# Cura is released under the terms of the LGPLv3 or higher.
import copy # To duplicate materials.
-from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QUrl
-from PyQt5.QtGui import QDesktopServices
+from PyQt6.QtCore import pyqtSignal, pyqtSlot, QObject, QUrl
+from PyQt6.QtGui import QDesktopServices
from typing import Any, Dict, Optional, TYPE_CHECKING
import uuid # To generate new GUIDs for new materials.
diff --git a/cura/Machines/Models/MultiBuildPlateModel.py b/cura/Machines/Models/MultiBuildPlateModel.py
index 8e2f086e3b..300c35754b 100644
--- a/cura/Machines/Models/MultiBuildPlateModel.py
+++ b/cura/Machines/Models/MultiBuildPlateModel.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import QTimer, pyqtSignal, pyqtProperty
+from PyQt6.QtCore import QTimer, pyqtSignal, pyqtProperty
from UM.Application import Application
from UM.Scene.Camera import Camera
diff --git a/cura/Machines/Models/NozzleModel.py b/cura/Machines/Models/NozzleModel.py
index 5f7f8b02f5..2083866ac5 100644
--- a/cura/Machines/Models/NozzleModel.py
+++ b/cura/Machines/Models/NozzleModel.py
@@ -1,7 +1,7 @@
# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import Qt
+from PyQt6.QtCore import Qt
from UM.Logger import Logger
from UM.Qt.ListModel import ListModel
@@ -10,9 +10,9 @@ from cura.Machines.ContainerTree import ContainerTree
class NozzleModel(ListModel):
- IdRole = Qt.UserRole + 1
- HotendNameRole = Qt.UserRole + 2
- ContainerNodeRole = Qt.UserRole + 3
+ IdRole = Qt.ItemDataRole.UserRole + 1
+ HotendNameRole = Qt.ItemDataRole.UserRole + 2
+ ContainerNodeRole = Qt.ItemDataRole.UserRole + 3
def __init__(self, parent = None):
super().__init__(parent)
diff --git a/cura/Machines/Models/QualityManagementModel.py b/cura/Machines/Models/QualityManagementModel.py
index 63c1ead29d..8db8719784 100644
--- a/cura/Machines/Models/QualityManagementModel.py
+++ b/cura/Machines/Models/QualityManagementModel.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Any, cast, Dict, Optional, TYPE_CHECKING
-from PyQt5.QtCore import pyqtSlot, QObject, Qt, QTimer
+from PyQt6.QtCore import pyqtSlot, QObject, Qt, QTimer
from UM.Logger import Logger
from UM.Qt.ListModel import ListModel
@@ -29,13 +29,13 @@ if TYPE_CHECKING:
class QualityManagementModel(ListModel):
"""This the QML model for the quality management page."""
- NameRole = Qt.UserRole + 1
- IsReadOnlyRole = Qt.UserRole + 2
- QualityGroupRole = Qt.UserRole + 3
- QualityTypeRole = Qt.UserRole + 4
- QualityChangesGroupRole = Qt.UserRole + 5
- IntentCategoryRole = Qt.UserRole + 6
- SectionNameRole = Qt.UserRole + 7
+ NameRole = Qt.ItemDataRole.UserRole + 1
+ IsReadOnlyRole = Qt.ItemDataRole.UserRole + 2
+ QualityGroupRole = Qt.ItemDataRole.UserRole + 3
+ QualityTypeRole = Qt.ItemDataRole.UserRole + 4
+ QualityChangesGroupRole = Qt.ItemDataRole.UserRole + 5
+ IntentCategoryRole = Qt.ItemDataRole.UserRole + 6
+ SectionNameRole = Qt.ItemDataRole.UserRole + 7
def __init__(self, parent: Optional["QObject"] = None) -> None:
super().__init__(parent)
diff --git a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py
index f7316e9c09..b3f92a06f4 100644
--- a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py
+++ b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py
@@ -1,7 +1,7 @@
# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import Qt, QTimer
+from PyQt6.QtCore import Qt, QTimer
import cura.CuraApplication # Imported this way to prevent circular dependencies.
from UM.Logger import Logger
@@ -13,14 +13,14 @@ from cura.Machines.Models.MachineModelUtils import fetchLayerHeight
class QualityProfilesDropDownMenuModel(ListModel):
"""QML Model for all built-in quality profiles. This model is used for the drop-down quality menu."""
- NameRole = Qt.UserRole + 1
- QualityTypeRole = Qt.UserRole + 2
- LayerHeightRole = Qt.UserRole + 3
- LayerHeightUnitRole = Qt.UserRole + 4
- AvailableRole = Qt.UserRole + 5
- QualityGroupRole = Qt.UserRole + 6
- QualityChangesGroupRole = Qt.UserRole + 7
- IsExperimentalRole = Qt.UserRole + 8
+ NameRole = Qt.ItemDataRole.UserRole + 1
+ QualityTypeRole = Qt.ItemDataRole.UserRole + 2
+ LayerHeightRole = Qt.ItemDataRole.UserRole + 3
+ LayerHeightUnitRole = Qt.ItemDataRole.UserRole + 4
+ AvailableRole = Qt.ItemDataRole.UserRole + 5
+ QualityGroupRole = Qt.ItemDataRole.UserRole + 6
+ QualityChangesGroupRole = Qt.ItemDataRole.UserRole + 7
+ IsExperimentalRole = Qt.ItemDataRole.UserRole + 8
def __init__(self, parent = None):
super().__init__(parent)
diff --git a/cura/Machines/Models/QualitySettingsModel.py b/cura/Machines/Models/QualitySettingsModel.py
index 89a996fba1..0780a51357 100644
--- a/cura/Machines/Models/QualitySettingsModel.py
+++ b/cura/Machines/Models/QualitySettingsModel.py
@@ -1,7 +1,7 @@
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import pyqtProperty, pyqtSignal, Qt
+from PyQt6.QtCore import pyqtProperty, pyqtSignal, Qt
from typing import Set
import cura.CuraApplication
@@ -16,13 +16,13 @@ import os
class QualitySettingsModel(ListModel):
"""This model is used to show details settings of the selected quality in the quality management page."""
- KeyRole = Qt.UserRole + 1
- LabelRole = Qt.UserRole + 2
- UnitRole = Qt.UserRole + 3
- ProfileValueRole = Qt.UserRole + 4
- ProfileValueSourceRole = Qt.UserRole + 5
- UserValueRole = Qt.UserRole + 6
- CategoryRole = Qt.UserRole + 7
+ KeyRole = Qt.ItemDataRole.UserRole + 1
+ LabelRole = Qt.ItemDataRole.UserRole + 2
+ UnitRole = Qt.ItemDataRole.UserRole + 3
+ ProfileValueRole = Qt.ItemDataRole.UserRole + 4
+ ProfileValueSourceRole = Qt.ItemDataRole.UserRole + 5
+ UserValueRole = Qt.ItemDataRole.UserRole + 6
+ CategoryRole = Qt.ItemDataRole.UserRole + 7
GLOBAL_STACK_POSITION = -1
diff --git a/cura/Machines/Models/SettingVisibilityPresetsModel.py b/cura/Machines/Models/SettingVisibilityPresetsModel.py
index 2ca0960de4..d4c590dc74 100644
--- a/cura/Machines/Models/SettingVisibilityPresetsModel.py
+++ b/cura/Machines/Models/SettingVisibilityPresetsModel.py
@@ -3,7 +3,7 @@
from typing import Optional, List
-from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject
+from PyQt6.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject
from UM.Logger import Logger
from UM.Preferences import Preferences
diff --git a/cura/Machines/Models/UserChangesModel.py b/cura/Machines/Models/UserChangesModel.py
index 43bbe8a663..171e910dd8 100644
--- a/cura/Machines/Models/UserChangesModel.py
+++ b/cura/Machines/Models/UserChangesModel.py
@@ -4,7 +4,7 @@
import os
from collections import OrderedDict
-from PyQt5.QtCore import pyqtSlot, Qt
+from PyQt6.QtCore import pyqtSlot, Qt
from UM.Application import Application
from UM.Logger import Logger
@@ -15,12 +15,12 @@ from UM.Qt.ListModel import ListModel
class UserChangesModel(ListModel):
- KeyRole = Qt.UserRole + 1
- LabelRole = Qt.UserRole + 2
- ExtruderRole = Qt.UserRole + 3
- OriginalValueRole = Qt.UserRole + 4
- UserValueRole = Qt.UserRole + 6
- CategoryRole = Qt.UserRole + 7
+ KeyRole = Qt.ItemDataRole.UserRole + 1
+ LabelRole = Qt.ItemDataRole.UserRole + 2
+ ExtruderRole = Qt.ItemDataRole.UserRole + 3
+ OriginalValueRole = Qt.ItemDataRole.UserRole + 4
+ UserValueRole = Qt.ItemDataRole.UserRole + 6
+ CategoryRole = Qt.ItemDataRole.UserRole + 7
def __init__(self, parent = None):
super().__init__(parent = parent)
diff --git a/cura/Machines/QualityChangesGroup.py b/cura/Machines/QualityChangesGroup.py
index 668fff785a..f30d04b8a8 100644
--- a/cura/Machines/QualityChangesGroup.py
+++ b/cura/Machines/QualityChangesGroup.py
@@ -3,7 +3,7 @@
from typing import Any, Dict, Optional
-from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal
+from PyQt6.QtCore import QObject, pyqtProperty, pyqtSignal
class QualityChangesGroup(QObject):
diff --git a/cura/OAuth2/AuthorizationHelpers.py b/cura/OAuth2/AuthorizationHelpers.py
index 77e3c66c11..a654ee4bdb 100644
--- a/cura/OAuth2/AuthorizationHelpers.py
+++ b/cura/OAuth2/AuthorizationHelpers.py
@@ -4,7 +4,7 @@
from base64 import b64encode
from datetime import datetime
from hashlib import sha512
-from PyQt5.QtNetwork import QNetworkReply
+from PyQt6.QtNetwork import QNetworkReply
import secrets
from typing import Callable, Optional
import urllib.parse
diff --git a/cura/OAuth2/AuthorizationService.py b/cura/OAuth2/AuthorizationService.py
index 0343af68a8..f2e6cd27ec 100644
--- a/cura/OAuth2/AuthorizationService.py
+++ b/cura/OAuth2/AuthorizationService.py
@@ -6,8 +6,8 @@ from datetime import datetime, timedelta
from typing import Callable, Dict, Optional, TYPE_CHECKING, Union
from urllib.parse import urlencode, quote_plus
-from PyQt5.QtCore import QUrl
-from PyQt5.QtGui import QDesktopServices
+from PyQt6.QtCore import QUrl
+from PyQt6.QtGui import QDesktopServices
from UM.Logger import Logger
from UM.Message import Message
diff --git a/cura/PlatformPhysics.py b/cura/PlatformPhysics.py
index 5fd2e70a1c..1cd5c1844c 100755
--- a/cura/PlatformPhysics.py
+++ b/cura/PlatformPhysics.py
@@ -1,7 +1,7 @@
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import QTimer
+from PyQt6.QtCore import QTimer
from shapely.errors import TopologicalError # To capture errors if Shapely messes up.
from UM.Application import Application
diff --git a/cura/PrintJobPreviewImageProvider.py b/cura/PrintJobPreviewImageProvider.py
index 321164adeb..90c115a4b4 100644
--- a/cura/PrintJobPreviewImageProvider.py
+++ b/cura/PrintJobPreviewImageProvider.py
@@ -1,6 +1,6 @@
-from PyQt5.QtGui import QImage
-from PyQt5.QtQuick import QQuickImageProvider
-from PyQt5.QtCore import QSize
+from PyQt6.QtGui import QImage
+from PyQt6.QtQuick import QQuickImageProvider
+from PyQt6.QtCore import QSize
from UM.Application import Application
from typing import Tuple
@@ -8,7 +8,7 @@ from typing import Tuple
class PrintJobPreviewImageProvider(QQuickImageProvider):
def __init__(self):
- super().__init__(QQuickImageProvider.Image)
+ super().__init__(QQuickImageProvider.ImageType.Image)
def requestImage(self, id: str, size: QSize) -> Tuple[QImage, QSize]:
"""Request a new image.
diff --git a/cura/PrinterOutput/FirmwareUpdater.py b/cura/PrinterOutput/FirmwareUpdater.py
index cfcfb2204f..0c1c427ff2 100644
--- a/cura/PrinterOutput/FirmwareUpdater.py
+++ b/cura/PrinterOutput/FirmwareUpdater.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import QObject, QUrl, pyqtSignal, pyqtProperty
+from PyQt6.QtCore import QObject, QUrl, pyqtSignal, pyqtProperty
from enum import IntEnum
from threading import Thread
diff --git a/cura/PrinterOutput/GenericOutputController.py b/cura/PrinterOutput/GenericOutputController.py
index c160459776..9531a1ab89 100644
--- a/cura/PrinterOutput/GenericOutputController.py
+++ b/cura/PrinterOutput/GenericOutputController.py
@@ -3,7 +3,7 @@
from typing import TYPE_CHECKING, Set, Union, Optional
-from PyQt5.QtCore import QTimer
+from PyQt6.QtCore import QTimer
from .PrinterOutputController import PrinterOutputController
diff --git a/cura/PrinterOutput/Models/ExtruderConfigurationModel.py b/cura/PrinterOutput/Models/ExtruderConfigurationModel.py
index 4fbf951f45..4cc3e81f56 100644
--- a/cura/PrinterOutput/Models/ExtruderConfigurationModel.py
+++ b/cura/PrinterOutput/Models/ExtruderConfigurationModel.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Optional
-from PyQt5.QtCore import pyqtProperty, QObject, pyqtSignal
+from PyQt6.QtCore import pyqtProperty, QObject, pyqtSignal
from .MaterialOutputModel import MaterialOutputModel
diff --git a/cura/PrinterOutput/Models/ExtruderOutputModel.py b/cura/PrinterOutput/Models/ExtruderOutputModel.py
index bcd0f579c2..ae1b175f3f 100644
--- a/cura/PrinterOutput/Models/ExtruderOutputModel.py
+++ b/cura/PrinterOutput/Models/ExtruderOutputModel.py
@@ -3,7 +3,7 @@
from typing import Optional, TYPE_CHECKING
-from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot
+from PyQt6.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot
from .ExtruderConfigurationModel import ExtruderConfigurationModel
diff --git a/cura/PrinterOutput/Models/MaterialOutputModel.py b/cura/PrinterOutput/Models/MaterialOutputModel.py
index 3714824a89..89509ace72 100644
--- a/cura/PrinterOutput/Models/MaterialOutputModel.py
+++ b/cura/PrinterOutput/Models/MaterialOutputModel.py
@@ -3,7 +3,7 @@
from typing import Optional
-from PyQt5.QtCore import pyqtProperty, QObject
+from PyQt6.QtCore import pyqtProperty, QObject
class MaterialOutputModel(QObject):
diff --git a/cura/PrinterOutput/Models/PrintJobOutputModel.py b/cura/PrinterOutput/Models/PrintJobOutputModel.py
index f7404f71ed..deb7947614 100644
--- a/cura/PrinterOutput/Models/PrintJobOutputModel.py
+++ b/cura/PrinterOutput/Models/PrintJobOutputModel.py
@@ -3,8 +3,8 @@
from typing import Optional, TYPE_CHECKING, List
-from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot, QUrl
-from PyQt5.QtGui import QImage
+from PyQt6.QtCore import pyqtSignal, pyqtProperty, QObject, pyqtSlot, QUrl
+from PyQt6.QtGui import QImage
if TYPE_CHECKING:
from cura.PrinterOutput.PrinterOutputController import PrinterOutputController
diff --git a/cura/PrinterOutput/Models/PrinterConfigurationModel.py b/cura/PrinterOutput/Models/PrinterConfigurationModel.py
index 54f52134b2..85c69abcd3 100644
--- a/cura/PrinterOutput/Models/PrinterConfigurationModel.py
+++ b/cura/PrinterOutput/Models/PrinterConfigurationModel.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import pyqtProperty, QObject, pyqtSignal
+from PyQt6.QtCore import pyqtProperty, QObject, pyqtSignal
from typing import List
MYPY = False
diff --git a/cura/PrinterOutput/Models/PrinterOutputModel.py b/cura/PrinterOutput/Models/PrinterOutputModel.py
index 37464b0b7d..2f7091e014 100644
--- a/cura/PrinterOutput/Models/PrinterOutputModel.py
+++ b/cura/PrinterOutput/Models/PrinterOutputModel.py
@@ -1,7 +1,7 @@
# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant, pyqtSlot, QUrl
+from PyQt6.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant, pyqtSlot, QUrl
from typing import List, Dict, Optional, TYPE_CHECKING
from UM.Math.Vector import Vector
from cura.PrinterOutput.Peripheral import Peripheral
diff --git a/cura/PrinterOutput/NetworkMJPGImage.py b/cura/PrinterOutput/NetworkMJPGImage.py
index 0bfcfab764..a482b40ad8 100644
--- a/cura/PrinterOutput/NetworkMJPGImage.py
+++ b/cura/PrinterOutput/NetworkMJPGImage.py
@@ -1,10 +1,10 @@
# Copyright (c) 2018 Aldo Hoeben / fieldOfView
# NetworkMJPGImage is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import QUrl, pyqtProperty, pyqtSignal, pyqtSlot, QRect, QByteArray
-from PyQt5.QtGui import QImage, QPainter
-from PyQt5.QtQuick import QQuickPaintedItem
-from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManager
+from PyQt6.QtCore import QUrl, pyqtProperty, pyqtSignal, pyqtSlot, QRect, QByteArray
+from PyQt6.QtGui import QImage, QPainter
+from PyQt6.QtQuick import QQuickPaintedItem
+from PyQt6.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManager
from UM.Logger import Logger
diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py
index 42c1cd78aa..dae24767db 100644
--- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py
+++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py
@@ -9,8 +9,8 @@ from cura.CuraApplication import CuraApplication
from cura.PrinterOutput.PrinterOutputDevice import PrinterOutputDevice, ConnectionState, ConnectionType
-from PyQt5.QtNetwork import QHttpMultiPart, QHttpPart, QNetworkRequest, QNetworkAccessManager, QNetworkReply, QAuthenticator
-from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl, QCoreApplication
+from PyQt6.QtNetwork import QHttpMultiPart, QHttpPart, QNetworkRequest, QNetworkAccessManager, QNetworkReply, QAuthenticator
+from PyQt6.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl, QCoreApplication
from time import time
from typing import Callable, Dict, List, Optional, Union
from enum import IntEnum
@@ -146,8 +146,8 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
url = QUrl("http://" + self._address + self._api_prefix + target)
request = QNetworkRequest(url)
if content_type is not None:
- request.setHeader(QNetworkRequest.ContentTypeHeader, content_type)
- request.setHeader(QNetworkRequest.UserAgentHeader, self._user_agent)
+ request.setHeader(QNetworkRequest.KnownHeaders.ContentTypeHeader, content_type)
+ request.setHeader(QNetworkRequest.KnownHeaders.UserAgentHeader, self._user_agent)
return request
def createFormPart(self, content_header: str, data: bytes, content_type: Optional[str] = None) -> QHttpPart:
@@ -162,10 +162,10 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
if not content_header.startswith("form-data;"):
content_header = "form-data; " + content_header
- part.setHeader(QNetworkRequest.ContentDispositionHeader, content_header)
+ part.setHeader(QNetworkRequest.KnownHeaders.ContentDispositionHeader, content_header)
if content_type is not None:
- part.setHeader(QNetworkRequest.ContentTypeHeader, content_type)
+ part.setHeader(QNetworkRequest.KnownHeaders.ContentTypeHeader, content_type)
part.setBody(data)
return part
@@ -311,7 +311,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
def postForm(self, target: str, header_data: str, body_data: bytes, on_finished: Optional[Callable[[QNetworkReply], None]], on_progress: Callable = None) -> None:
post_part = QHttpPart()
- post_part.setHeader(QNetworkRequest.ContentDispositionHeader, header_data)
+ post_part.setHeader(QNetworkRequest.KnownHeaders.ContentDispositionHeader, header_data)
post_part.setBody(body_data)
self.postFormWithParts(target, [post_part], on_finished, on_progress)
@@ -357,10 +357,10 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice):
def _handleOnFinished(self, reply: QNetworkReply) -> None:
# Due to garbage collection, we need to cache certain bits of post operations.
# As we don't want to keep them around forever, delete them if we get a reply.
- if reply.operation() == QNetworkAccessManager.PostOperation:
+ if reply.operation() == QNetworkAccessManager.Operation.PostOperation:
self._clearCachedMultiPart(reply)
- if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) is None:
+ if reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute) is None:
# No status code means it never even reached remote.
return
diff --git a/cura/PrinterOutput/PrinterOutputDevice.py b/cura/PrinterOutput/PrinterOutputDevice.py
index 2939076a9a..d3a5e252d3 100644
--- a/cura/PrinterOutput/PrinterOutputDevice.py
+++ b/cura/PrinterOutput/PrinterOutputDevice.py
@@ -1,11 +1,11 @@
-# Copyright (c) 2021 Ultimaker B.V.
+# Copyright (c) 2022 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
from enum import IntEnum
from typing import Callable, List, Optional, Union
-from PyQt5.QtCore import pyqtProperty, pyqtSignal, QObject, QTimer, QUrl
-from PyQt5.QtWidgets import QMessageBox
+from PyQt6.QtCore import pyqtProperty, pyqtSignal, QObject, QTimer, QUrl
+from PyQt6.QtWidgets import QMessageBox
import cura.CuraApplication # Imported like this to prevent circular imports.
from UM.Logger import Logger
@@ -137,7 +137,11 @@ class PrinterOutputDevice(QObject, OutputDevice):
"""
if self.connectionState != connection_state:
self._connection_state = connection_state
- cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack().setMetaDataEntry("is_online", self.isConnected())
+ application = cura.CuraApplication.CuraApplication.getInstance()
+ if application is not None: # Might happen during the closing of Cura or in a test.
+ global_stack = application.getGlobalContainerStack()
+ if global_stack is not None:
+ global_stack.setMetaDataEntry("is_online", self.isConnected())
self.connectionStateChanged.emit(self._id)
@pyqtProperty(int, constant = True)
diff --git a/cura/PrinterOutput/UploadMaterialsJob.py b/cura/PrinterOutput/UploadMaterialsJob.py
index 7a08a198c1..b6fbafeb24 100644
--- a/cura/PrinterOutput/UploadMaterialsJob.py
+++ b/cura/PrinterOutput/UploadMaterialsJob.py
@@ -5,7 +5,7 @@ import enum
import functools # For partial methods to use as callbacks with information pre-filled.
import json # To serialise metadata for API calls.
import os # To delete the archive when we're done.
-from PyQt5.QtCore import QUrl
+from PyQt6.QtCore import QUrl
import tempfile # To create an archive before we upload it.
import cura.CuraApplication # Imported like this to prevent circular imports.
@@ -21,7 +21,7 @@ from UM.TaskManagement.HttpRequestScope import JsonDecoratorScope
from typing import Any, cast, Dict, List, Optional, TYPE_CHECKING
if TYPE_CHECKING:
- from PyQt5.QtNetwork import QNetworkReply
+ from PyQt6.QtNetwork import QNetworkReply
from cura.UltimakerCloud.CloudMaterialSync import CloudMaterialSync
catalog = i18nCatalog("cura")
diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py
index 36697b7c57..bc4ba3ffd5 100644
--- a/cura/Scene/ConvexHullDecorator.py
+++ b/cura/Scene/ConvexHullDecorator.py
@@ -1,7 +1,7 @@
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import QTimer
+from PyQt6.QtCore import QTimer
from UM.Application import Application
from UM.Math.Polygon import Polygon
diff --git a/cura/Scene/CuraSceneController.py b/cura/Scene/CuraSceneController.py
index 99a6eee0e2..c3aa3d0a7e 100644
--- a/cura/Scene/CuraSceneController.py
+++ b/cura/Scene/CuraSceneController.py
@@ -1,7 +1,7 @@
from UM.Logger import Logger
-from PyQt5.QtCore import Qt, pyqtSlot, QObject, QTimer
-from PyQt5.QtWidgets import QApplication
+from PyQt6.QtCore import Qt, pyqtSlot, QObject, QTimer
+from PyQt6.QtWidgets import QApplication
from UM.Scene.Camera import Camera
from cura.UI.ObjectsModel import ObjectsModel
diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py
index 518eaaa8fa..420c1c0afc 100644
--- a/cura/Settings/ContainerManager.py
+++ b/cura/Settings/ContainerManager.py
@@ -6,8 +6,8 @@ import urllib.parse
import uuid
from typing import Any, cast, Dict, List, TYPE_CHECKING, Union
-from PyQt5.QtCore import QObject, QUrl
-from PyQt5.QtWidgets import QMessageBox
+from PyQt6.QtCore import QObject, QUrl
+from PyQt6.QtWidgets import QMessageBox
from UM.i18n import i18nCatalog
from UM.FlameProfiler import pyqtSlot
@@ -47,11 +47,11 @@ class ContainerManager(QObject):
def __init__(self, application: "CuraApplication") -> None:
if ContainerManager.__instance is not None:
raise RuntimeError("Try to create singleton '%s' more than once" % self.__class__.__name__)
- ContainerManager.__instance = self
try:
super().__init__(parent = application)
except TypeError:
super().__init__()
+ ContainerManager.__instance = self
self._container_name_filters = {} # type: Dict[str, Dict[str, Any]]
diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py
index 6130019f4d..6a0b8c0cd0 100644
--- a/cura/Settings/CuraContainerRegistry.py
+++ b/cura/Settings/CuraContainerRegistry.py
@@ -6,7 +6,7 @@ import re
import configparser
from typing import Any, cast, Dict, Optional, List, Union, Tuple
-from PyQt5.QtWidgets import QMessageBox
+from PyQt6.QtWidgets import QMessageBox
from UM.Decorators import override
from UM.Settings.ContainerFormatError import ContainerFormatError
diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py
index f594ad3d0c..061d5c6161 100755
--- a/cura/Settings/CuraContainerStack.py
+++ b/cura/Settings/CuraContainerStack.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Any, cast, List, Optional, Dict
-from PyQt5.QtCore import pyqtProperty, pyqtSignal, QObject
+from PyQt6.QtCore import pyqtProperty, pyqtSignal, QObject
from UM.Application import Application
from UM.Decorators import override
diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py
index 81d3f733b4..34ba96e280 100755
--- a/cura/Settings/ExtruderManager.py
+++ b/cura/Settings/ExtruderManager.py
@@ -1,7 +1,7 @@
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant # For communicating data and events to Qt.
+from PyQt6.QtCore import pyqtSignal, pyqtProperty, QObject, QVariant # For communicating data and events to Qt.
from UM.FlameProfiler import pyqtSlot
import cura.CuraApplication # To get the global container stack to find the current machine.
@@ -31,9 +31,9 @@ class ExtruderManager(QObject):
if ExtruderManager.__instance is not None:
raise RuntimeError("Try to create singleton '%s' more than once" % self.__class__.__name__)
- ExtruderManager.__instance = self
super().__init__(parent)
+ ExtruderManager.__instance = self
self._application = cura.CuraApplication.CuraApplication.getInstance()
diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py
index 2a9838c671..e93193818c 100644
--- a/cura/Settings/ExtruderStack.py
+++ b/cura/Settings/ExtruderStack.py
@@ -3,7 +3,7 @@
from typing import Any, Dict, TYPE_CHECKING, Optional
-from PyQt5.QtCore import pyqtProperty, pyqtSignal
+from PyQt6.QtCore import pyqtProperty, pyqtSignal
from UM.Decorators import override
from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase
diff --git a/cura/Settings/GlobalStack.py b/cura/Settings/GlobalStack.py
index 282034c0ee..84f77d0451 100755
--- a/cura/Settings/GlobalStack.py
+++ b/cura/Settings/GlobalStack.py
@@ -6,7 +6,7 @@ import threading
from typing import Any, Dict, Optional, Set, TYPE_CHECKING, List
import uuid
-from PyQt5.QtCore import pyqtProperty, pyqtSlot, pyqtSignal
+from PyQt6.QtCore import pyqtProperty, pyqtSlot, pyqtSignal
from UM.Decorators import deprecated, override
from UM.MimeTypeDatabase import MimeType, MimeTypeDatabase
diff --git a/cura/Settings/IntentManager.py b/cura/Settings/IntentManager.py
index a556a86dd8..2dfec02201 100644
--- a/cura/Settings/IntentManager.py
+++ b/cura/Settings/IntentManager.py
@@ -1,7 +1,7 @@
# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, pyqtSlot
+from PyQt6.QtCore import QObject, pyqtProperty, pyqtSignal, pyqtSlot
from typing import Any, Dict, List, Set, Tuple, TYPE_CHECKING
from UM.Logger import Logger
diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py
index 648b1e9cae..1c7a8f0e98 100755
--- a/cura/Settings/MachineManager.py
+++ b/cura/Settings/MachineManager.py
@@ -6,7 +6,7 @@ import re
import unicodedata
from typing import Any, List, Dict, TYPE_CHECKING, Optional, cast, Set
-from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, QTimer
+from PyQt6.QtCore import QObject, pyqtProperty, pyqtSignal, QTimer
from UM.ConfigurationErrorMessage import ConfigurationErrorMessage
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
diff --git a/cura/Settings/MachineNameValidator.py b/cura/Settings/MachineNameValidator.py
index 99a5c7da0a..409365ef97 100644
--- a/cura/Settings/MachineNameValidator.py
+++ b/cura/Settings/MachineNameValidator.py
@@ -1,8 +1,8 @@
# Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import pyqtSlot, pyqtProperty, QObject, pyqtSignal, QRegExp
-from PyQt5.QtGui import QValidator
+from PyQt6.QtCore import pyqtSlot, pyqtProperty, QObject, pyqtSignal
+from PyQt6.QtGui import QValidator
import os #For statvfs.
import urllib #To escape machine names for how they're saved to file.
@@ -65,6 +65,6 @@ class MachineNameValidator(QObject):
self.validation_regex = "a^" #Never matches (unless you manage to get "a" before the start of the string... good luck).
self.validationChanged.emit()
- @pyqtProperty("QRegExp", notify=validationChanged)
+ @pyqtProperty(str, notify=validationChanged)
def machineNameRegex(self):
- return QRegExp(self.machine_name_regex) \ No newline at end of file
+ return str(self.machine_name_regex) \ No newline at end of file
diff --git a/cura/Settings/SettingInheritanceManager.py b/cura/Settings/SettingInheritanceManager.py
index 34dfaeb616..5ae00ae271 100644
--- a/cura/Settings/SettingInheritanceManager.py
+++ b/cura/Settings/SettingInheritanceManager.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import List, Optional, TYPE_CHECKING
-from PyQt5.QtCore import QObject, QTimer, pyqtProperty, pyqtSignal
+from PyQt6.QtCore import QObject, QTimer, pyqtProperty, pyqtSignal
from UM.FlameProfiler import pyqtSlot
from UM.Application import Application
from UM.Logger import Logger
diff --git a/cura/Settings/SettingVisibilityPreset.py b/cura/Settings/SettingVisibilityPreset.py
index e8a4211d69..f41f38faa3 100644
--- a/cura/Settings/SettingVisibilityPreset.py
+++ b/cura/Settings/SettingVisibilityPreset.py
@@ -3,7 +3,7 @@ import urllib.parse
from configparser import ConfigParser
from typing import List
-from PyQt5.QtCore import pyqtProperty, QObject, pyqtSignal
+from PyQt6.QtCore import pyqtProperty, QObject, pyqtSignal
from UM.Logger import Logger
from UM.MimeTypeDatabase import MimeTypeDatabase
diff --git a/cura/Settings/SidebarCustomMenuItemsModel.py b/cura/Settings/SidebarCustomMenuItemsModel.py
index 7177d26923..22b7a9b227 100644
--- a/cura/Settings/SidebarCustomMenuItemsModel.py
+++ b/cura/Settings/SidebarCustomMenuItemsModel.py
@@ -4,14 +4,14 @@
from typing import Any
from UM.Qt.ListModel import ListModel
-from PyQt5.QtCore import pyqtSlot, Qt
+from PyQt6.QtCore import pyqtSlot, Qt
class SidebarCustomMenuItemsModel(ListModel):
- name_role = Qt.UserRole + 1
- actions_role = Qt.UserRole + 2
- menu_item_role = Qt.UserRole + 3
- menu_item_icon_name_role = Qt.UserRole + 5
+ name_role = Qt.ItemDataRole.UserRole + 1
+ actions_role = Qt.ItemDataRole.UserRole + 2
+ menu_item_role = Qt.ItemDataRole.UserRole + 3
+ menu_item_icon_name_role = Qt.ItemDataRole.UserRole + 5
def __init__(self, parent=None):
super().__init__(parent)
diff --git a/cura/Settings/SimpleModeSettingsManager.py b/cura/Settings/SimpleModeSettingsManager.py
index 6650a9b333..af8707f235 100644
--- a/cura/Settings/SimpleModeSettingsManager.py
+++ b/cura/Settings/SimpleModeSettingsManager.py
@@ -1,7 +1,7 @@
# Copyright (c) 2017 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty
+from PyQt6.QtCore import QObject, pyqtSignal, pyqtProperty
from UM.Application import Application
diff --git a/cura/SingleInstance.py b/cura/SingleInstance.py
index 597a4d5f32..af98869ad7 100644
--- a/cura/SingleInstance.py
+++ b/cura/SingleInstance.py
@@ -5,7 +5,7 @@ import json
import os
from typing import List, Optional
-from PyQt5.QtNetwork import QLocalServer, QLocalSocket
+from PyQt6.QtNetwork import QLocalServer, QLocalSocket
from UM.Qt.QtApplication import QtApplication #For typing.
from UM.Logger import Logger
diff --git a/cura/Snapshot.py b/cura/Snapshot.py
index a7b813610f..97306fb371 100644
--- a/cura/Snapshot.py
+++ b/cura/Snapshot.py
@@ -2,9 +2,9 @@
# Cura is released under the terms of the LGPLv3 or higher.
import numpy
-from PyQt5 import QtCore
-from PyQt5.QtCore import QCoreApplication
-from PyQt5.QtGui import QImage
+from PyQt6 import QtCore
+from PyQt6.QtCore import QCoreApplication
+from PyQt6.QtGui import QImage
from cura.PreviewPass import PreviewPass
diff --git a/cura/Stages/CuraStage.py b/cura/Stages/CuraStage.py
index 6c4d46dd72..869ed309dc 100644
--- a/cura/Stages/CuraStage.py
+++ b/cura/Stages/CuraStage.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import pyqtProperty, QUrl
+from PyQt6.QtCore import pyqtProperty, QUrl
from UM.Stage import Stage
diff --git a/cura/UI/CuraSplashScreen.py b/cura/UI/CuraSplashScreen.py
index 4fa798247d..656a5aea55 100644
--- a/cura/UI/CuraSplashScreen.py
+++ b/cura/UI/CuraSplashScreen.py
@@ -1,9 +1,9 @@
# Copyright (c) 2020 Ultimaker B.V.
# Uranium is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import Qt, QCoreApplication, QTimer
-from PyQt5.QtGui import QPixmap, QColor, QFont, QPen, QPainter
-from PyQt5.QtWidgets import QSplashScreen
+from PyQt6.QtCore import Qt, QCoreApplication, QTimer
+from PyQt6.QtGui import QPixmap, QColor, QFont, QPen, QPainter
+from PyQt6.QtWidgets import QSplashScreen
from UM.Resources import Resources
from UM.Application import Application
@@ -63,8 +63,8 @@ class CuraSplashScreen(QSplashScreen):
painter.save()
painter.setPen(QColor(255, 255, 255, 255))
- painter.setRenderHint(QPainter.Antialiasing)
- painter.setRenderHint(QPainter.Antialiasing, True)
+ painter.setRenderHint(QPainter.RenderHint.Antialiasing)
+ painter.setRenderHint(QPainter.RenderHint.Antialiasing, True)
version = Application.getInstance().getVersion().split("-")
@@ -72,12 +72,12 @@ class CuraSplashScreen(QSplashScreen):
font = QFont() # Using system-default font here
font.setPixelSize(18)
painter.setFont(font)
- painter.drawText(60, 70 + self._version_y_offset, round(330 * self._scale), round(230 * self._scale), Qt.AlignLeft | Qt.AlignTop, version[0] if not ApplicationMetadata.IsAlternateVersion else ApplicationMetadata.CuraBuildType)
+ painter.drawText(60, 70 + self._version_y_offset, round(330 * self._scale), round(230 * self._scale), Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignTop, version[0] if not ApplicationMetadata.IsAlternateVersion else ApplicationMetadata.CuraBuildType)
if len(version) > 1:
font.setPixelSize(16)
painter.setFont(font)
painter.setPen(QColor(200, 200, 200, 255))
- painter.drawText(247, 105 + self._version_y_offset, round(330 * self._scale), round(255 * self._scale), Qt.AlignLeft | Qt.AlignTop, version[1])
+ painter.drawText(247, 105 + self._version_y_offset, round(330 * self._scale), round(255 * self._scale), Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignTop, version[1])
painter.setPen(QColor(255, 255, 255, 255))
# Draw the loading image
@@ -96,7 +96,7 @@ class CuraSplashScreen(QSplashScreen):
painter.setPen(pen)
painter.setFont(font)
painter.drawText(100, 128, 170, 64,
- Qt.AlignLeft | Qt.AlignVCenter | Qt.TextWordWrap,
+ Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignVCenter | Qt.TextFlag.TextWordWrap,
self._current_message)
painter.restore()
@@ -108,7 +108,7 @@ class CuraSplashScreen(QSplashScreen):
self._current_message = message
self.messageChanged.emit(message)
- QCoreApplication.flush()
+ QCoreApplication.processEvents() # Used to be .flush() -- this might be the closest alternative, but uncertain.
self.repaint()
def close(self):
diff --git a/cura/UI/MachineActionManager.py b/cura/UI/MachineActionManager.py
index 5e31de32c2..7a4ce92de0 100644
--- a/cura/UI/MachineActionManager.py
+++ b/cura/UI/MachineActionManager.py
@@ -3,7 +3,7 @@
from typing import TYPE_CHECKING, Optional, List, Set, Dict
-from PyQt5.QtCore import QObject
+from PyQt6.QtCore import QObject
from UM.FlameProfiler import pyqtSlot
from UM.Logger import Logger
diff --git a/cura/UI/MachineSettingsManager.py b/cura/UI/MachineSettingsManager.py
index 1d2604c3c9..077dc29f6c 100644
--- a/cura/UI/MachineSettingsManager.py
+++ b/cura/UI/MachineSettingsManager.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Optional, TYPE_CHECKING
-from PyQt5.QtCore import QObject, pyqtSlot
+from PyQt6.QtCore import QObject, pyqtSlot
from UM.i18n import i18nCatalog
diff --git a/cura/UI/ObjectsModel.py b/cura/UI/ObjectsModel.py
index 64a6e89054..884d516f08 100644
--- a/cura/UI/ObjectsModel.py
+++ b/cura/UI/ObjectsModel.py
@@ -4,7 +4,7 @@ from UM.Logger import Logger
import re
from typing import Dict, List, Optional, Union
-from PyQt5.QtCore import QTimer, Qt
+from PyQt6.QtCore import QTimer, Qt
from UM.Application import Application
from UM.Qt.ListModel import ListModel
@@ -34,14 +34,14 @@ class _NodeInfo:
class ObjectsModel(ListModel):
"""Keep track of all objects in the project"""
- NameRole = Qt.UserRole + 1
- SelectedRole = Qt.UserRole + 2
- OutsideAreaRole = Qt.UserRole + 3
- BuilplateNumberRole = Qt.UserRole + 4
- NodeRole = Qt.UserRole + 5
- PerObjectSettingsCountRole = Qt.UserRole + 6
- MeshTypeRole = Qt.UserRole + 7
- ExtruderNumberRole = Qt.UserRole + 8
+ NameRole = Qt.ItemDataRole.UserRole + 1
+ SelectedRole = Qt.ItemDataRole.UserRole + 2
+ OutsideAreaRole = Qt.ItemDataRole.UserRole + 3
+ BuilplateNumberRole = Qt.ItemDataRole.UserRole + 4
+ NodeRole = Qt.ItemDataRole.UserRole + 5
+ PerObjectSettingsCountRole = Qt.ItemDataRole.UserRole + 6
+ MeshTypeRole = Qt.ItemDataRole.UserRole + 7
+ ExtruderNumberRole = Qt.ItemDataRole.UserRole + 8
def __init__(self, parent = None) -> None:
super().__init__(parent)
diff --git a/cura/UI/PrintInformation.py b/cura/UI/PrintInformation.py
index 2135c6fe81..a4c1410c0e 100644
--- a/cura/UI/PrintInformation.py
+++ b/cura/UI/PrintInformation.py
@@ -6,7 +6,7 @@ import math
import os
from typing import Dict, List, Optional, TYPE_CHECKING
-from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty, pyqtSlot, QTimer
+from PyQt6.QtCore import QObject, pyqtSignal, pyqtProperty, pyqtSlot, QTimer
from UM.Logger import Logger
from UM.Qt.Duration import Duration
diff --git a/cura/UI/RecommendedMode.py b/cura/UI/RecommendedMode.py
index 47b617740a..20680c0ca9 100644
--- a/cura/UI/RecommendedMode.py
+++ b/cura/UI/RecommendedMode.py
@@ -1,7 +1,7 @@
# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import QObject, pyqtSlot
+from PyQt6.QtCore import QObject, pyqtSlot
from cura import CuraApplication
diff --git a/cura/UI/TextManager.py b/cura/UI/TextManager.py
index 77dadae809..9fb68cc2fd 100644
--- a/cura/UI/TextManager.py
+++ b/cura/UI/TextManager.py
@@ -4,7 +4,7 @@
import collections
from typing import Optional, Dict, List, cast
-from PyQt5.QtCore import QObject, pyqtSlot
+from PyQt6.QtCore import QObject, pyqtSlot
from UM.i18n import i18nCatalog
from UM.Resources import Resources
diff --git a/cura/UI/WelcomePagesModel.py b/cura/UI/WelcomePagesModel.py
index 890e34a31e..26c27418cf 100644
--- a/cura/UI/WelcomePagesModel.py
+++ b/cura/UI/WelcomePagesModel.py
@@ -6,7 +6,7 @@ import os
from collections import deque
from typing import TYPE_CHECKING, Optional, List, Dict, Any
-from PyQt5.QtCore import QUrl, Qt, pyqtSlot, pyqtProperty, pyqtSignal
+from PyQt6.QtCore import QUrl, Qt, pyqtSlot, pyqtProperty, pyqtSignal
from UM.i18n import i18nCatalog
from UM.Logger import Logger
@@ -14,7 +14,7 @@ from UM.Qt.ListModel import ListModel
from UM.Resources import Resources
if TYPE_CHECKING:
- from PyQt5.QtCore import QObject
+ from PyQt6.QtCore import QObject
from cura.CuraApplication import CuraApplication
@@ -36,11 +36,11 @@ class WelcomePagesModel(ListModel):
Note that in any case, a page that has its "should_show_function" == False will ALWAYS be skipped.
"""
- IdRole = Qt.UserRole + 1 # Page ID
- PageUrlRole = Qt.UserRole + 2 # URL to the page's QML file
- NextPageIdRole = Qt.UserRole + 3 # The next page ID it should go to
- NextPageButtonTextRole = Qt.UserRole + 4 # The text for the next page button
- PreviousPageButtonTextRole = Qt.UserRole + 5 # The text for the previous page button
+ IdRole = Qt.ItemDataRole.UserRole + 1 # Page ID
+ PageUrlRole = Qt.ItemDataRole.UserRole + 2 # URL to the page's QML file
+ NextPageIdRole = Qt.ItemDataRole.UserRole + 3 # The next page ID it should go to
+ NextPageButtonTextRole = Qt.ItemDataRole.UserRole + 4 # The text for the next page button
+ PreviousPageButtonTextRole = Qt.ItemDataRole.UserRole + 5 # The text for the previous page button
def __init__(self, application: "CuraApplication", parent: Optional["QObject"] = None) -> None:
super().__init__(parent)
diff --git a/cura/UI/WhatsNewPagesModel.py b/cura/UI/WhatsNewPagesModel.py
index b99bdf30f0..4fb7802924 100644
--- a/cura/UI/WhatsNewPagesModel.py
+++ b/cura/UI/WhatsNewPagesModel.py
@@ -4,7 +4,7 @@
import os
from typing import Optional, Dict, List, Tuple, TYPE_CHECKING
-from PyQt5.QtCore import pyqtProperty, pyqtSlot
+from PyQt6.QtCore import pyqtProperty, pyqtSlot
from UM.Logger import Logger
from UM.Resources import Resources
@@ -12,7 +12,7 @@ from UM.Resources import Resources
from cura.UI.WelcomePagesModel import WelcomePagesModel
if TYPE_CHECKING:
- from PyQt5.QtCore import QObject
+ from PyQt6.QtCore import QObject
from cura.CuraApplication import CuraApplication
diff --git a/cura/UltimakerCloud/CloudMaterialSync.py b/cura/UltimakerCloud/CloudMaterialSync.py
index 8bf8962eaf..9b3af4a1b3 100644
--- a/cura/UltimakerCloud/CloudMaterialSync.py
+++ b/cura/UltimakerCloud/CloudMaterialSync.py
@@ -1,8 +1,8 @@
# Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl
-from PyQt5.QtGui import QDesktopServices
+from PyQt6.QtCore import pyqtProperty, pyqtSignal, pyqtSlot, QObject, QUrl
+from PyQt6.QtGui import QDesktopServices
from typing import Dict, Optional, TYPE_CHECKING
import zipfile # To export all materials in a .zip archive.
diff --git a/cura/UltimakerCloud/UltimakerCloudScope.py b/cura/UltimakerCloud/UltimakerCloudScope.py
index bbcc8e2aa9..a173c5c758 100644
--- a/cura/UltimakerCloud/UltimakerCloudScope.py
+++ b/cura/UltimakerCloud/UltimakerCloudScope.py
@@ -1,7 +1,7 @@
# Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtNetwork import QNetworkRequest
+from PyQt6.QtNetwork import QNetworkRequest
from UM.Logger import Logger
from UM.TaskManagement.HttpRequestScope import DefaultUserAgentScope
diff --git a/cura/Utils/NetworkingUtil.py b/cura/Utils/NetworkingUtil.py
index b13f7903b9..5e480b28a9 100644
--- a/cura/Utils/NetworkingUtil.py
+++ b/cura/Utils/NetworkingUtil.py
@@ -4,7 +4,7 @@
import socket
from typing import Optional
-from PyQt5.QtCore import QObject, pyqtSlot
+from PyQt6.QtCore import QObject, pyqtSlot
#
diff --git a/cura_app.py b/cura_app.py
index b9a42f0aba..da8b3bc18d 100755
--- a/cura_app.py
+++ b/cura_app.py
@@ -16,7 +16,7 @@ import argparse
import faulthandler
import os
-from PyQt5.QtNetwork import QSslConfiguration, QSslSocket
+from PyQt6.QtNetwork import QSslConfiguration, QSslSocket
from UM.Platform import Platform
from cura import ApplicationMetadata
@@ -148,15 +148,15 @@ def exceptHook(hook_type, value, traceback):
# The flag "CuraApplication.Created" is set to True when CuraApplication finishes its constructor call.
#
# Before the "started" flag is set to True, the Qt event loop has not started yet. The event loop is a blocking
- # call to the QApplication.exec_(). In this case, we need to:
+ # call to the QApplication.exec(). In this case, we need to:
# 1. Remove all scheduled events so no more unnecessary events will be processed, such as loading the main dialog,
# loading the machine, etc.
- # 2. Start the Qt event loop with exec_() and show the Crash Dialog.
+ # 2. Start the Qt event loop with exec() and show the Crash Dialog.
#
# If the application has finished its initialization and was running fine, and then something causes a crash,
# we run the old routine to show the Crash Dialog.
#
- from PyQt5.Qt import QApplication
+ from PyQt6.QtWidgets import QApplication
if CuraApplication.Created:
_crash_handler = CrashHandler(hook_type, value, traceback, has_started)
if CuraApplication.splash is not None:
@@ -164,7 +164,7 @@ def exceptHook(hook_type, value, traceback):
if not has_started:
CuraApplication.getInstance().removePostedEvents(None)
_crash_handler.early_crash_dialog.show()
- sys.exit(CuraApplication.getInstance().exec_())
+ sys.exit(CuraApplication.getInstance().exec())
else:
_crash_handler.show()
else:
@@ -175,7 +175,7 @@ def exceptHook(hook_type, value, traceback):
if CuraApplication.splash is not None:
CuraApplication.splash.close()
_crash_handler.early_crash_dialog.show()
- sys.exit(application.exec_())
+ sys.exit(application.exec())
# Set exception hook to use the crash dialog handler
@@ -228,7 +228,7 @@ if Platform.isLinux():
if ApplicationMetadata.CuraDebugMode:
ssl_conf = QSslConfiguration.defaultConfiguration()
- ssl_conf.setPeerVerifyMode(QSslSocket.VerifyNone)
+ ssl_conf.setPeerVerifyMode(QSslSocket.PeerVerifyMode.VerifyNone)
QSslConfiguration.setDefaultConfiguration(ssl_conf)
app = CuraApplication()
diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py
index 5f57e49cc6..ddc7922546 100755
--- a/plugins/3MFReader/ThreeMFWorkspaceReader.py
+++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py
@@ -34,7 +34,7 @@ from cura.Settings.CuraContainerStack import _ContainerIndexes
from cura.CuraApplication import CuraApplication
from cura.Utils.Threading import call_on_qt_thread
-from PyQt5.QtCore import QCoreApplication
+from PyQt6.QtCore import QCoreApplication
from .WorkspaceDialog import WorkspaceDialog
diff --git a/plugins/3MFReader/UpdatableMachinesModel.py b/plugins/3MFReader/UpdatableMachinesModel.py
index a332c669e6..9d6eee6c3e 100644
--- a/plugins/3MFReader/UpdatableMachinesModel.py
+++ b/plugins/3MFReader/UpdatableMachinesModel.py
@@ -3,7 +3,7 @@
from typing import Dict, List
-from PyQt5.QtCore import Qt
+from PyQt6.QtCore import Qt
from UM.Qt.ListModel import ListModel
from cura.Settings.GlobalStack import GlobalStack
@@ -25,10 +25,10 @@ class UpdatableMachinesModel(ListModel):
def __init__(self, parent = None) -> None:
super().__init__(parent)
- self.addRoleName(Qt.UserRole + 1, "id")
- self.addRoleName(Qt.UserRole + 2, "name")
- self.addRoleName(Qt.UserRole + 3, "displayName")
- self.addRoleName(Qt.UserRole + 4, "type") # Either "default_option" or "machine"
+ self.addRoleName(Qt.ItemDataRole.UserRole + 1, "id")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 2, "name")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 3, "displayName")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 4, "type") # Either "default_option" or "machine"
def update(self, machines: List[GlobalStack]) -> None:
items = [create_new_list_item] # type: List[Dict[str, str]]
diff --git a/plugins/3MFReader/WorkspaceDialog.py b/plugins/3MFReader/WorkspaceDialog.py
index 8d59ec1339..b63d8b6288 100644
--- a/plugins/3MFReader/WorkspaceDialog.py
+++ b/plugins/3MFReader/WorkspaceDialog.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import List, Optional, Dict, cast
-from PyQt5.QtCore import pyqtSignal, QObject, pyqtProperty, QCoreApplication
+from PyQt6.QtCore import pyqtSignal, QObject, pyqtProperty, QCoreApplication
from UM.FlameProfiler import pyqtSlot
from UM.PluginRegistry import PluginRegistry
from UM.Application import Application
diff --git a/plugins/3MFWriter/ThreeMFWriter.py b/plugins/3MFWriter/ThreeMFWriter.py
index 45ba556d65..75401c7d94 100644
--- a/plugins/3MFWriter/ThreeMFWriter.py
+++ b/plugins/3MFWriter/ThreeMFWriter.py
@@ -13,7 +13,7 @@ from cura.CuraApplication import CuraApplication
from cura.Utils.Threading import call_on_qt_thread
from cura.Snapshot import Snapshot
-from PyQt5.QtCore import QBuffer
+from PyQt6.QtCore import QBuffer
import Savitar
diff --git a/plugins/CuraDrive/src/CreateBackupJob.py b/plugins/CuraDrive/src/CreateBackupJob.py
index 12bbc035ac..7d772769ed 100644
--- a/plugins/CuraDrive/src/CreateBackupJob.py
+++ b/plugins/CuraDrive/src/CreateBackupJob.py
@@ -5,7 +5,7 @@ import threading
from datetime import datetime
from typing import Any, Dict, Optional
-from PyQt5.QtNetwork import QNetworkReply
+from PyQt6.QtNetwork import QNetworkReply
from UM.Job import Job
from UM.Logger import Logger
diff --git a/plugins/CuraDrive/src/DriveApiService.py b/plugins/CuraDrive/src/DriveApiService.py
index 6dd6f02b97..fde167ec10 100644
--- a/plugins/CuraDrive/src/DriveApiService.py
+++ b/plugins/CuraDrive/src/DriveApiService.py
@@ -3,7 +3,7 @@
from typing import Any, Optional, List, Dict, Callable
-from PyQt5.QtNetwork import QNetworkReply
+from PyQt6.QtNetwork import QNetworkReply
from UM.Logger import Logger
from UM.Signal import Signal, signalemitter
diff --git a/plugins/CuraDrive/src/DrivePluginExtension.py b/plugins/CuraDrive/src/DrivePluginExtension.py
index f42ffea9f7..460284074f 100644
--- a/plugins/CuraDrive/src/DrivePluginExtension.py
+++ b/plugins/CuraDrive/src/DrivePluginExtension.py
@@ -5,7 +5,7 @@ import os
from datetime import datetime
from typing import Any, cast, Dict, List, Optional
-from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal
+from PyQt6.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal
from UM.Extension import Extension
from UM.Logger import Logger
diff --git a/plugins/CuraDrive/src/RestoreBackupJob.py b/plugins/CuraDrive/src/RestoreBackupJob.py
index f59acbc8b7..54c94b389e 100644
--- a/plugins/CuraDrive/src/RestoreBackupJob.py
+++ b/plugins/CuraDrive/src/RestoreBackupJob.py
@@ -7,7 +7,7 @@ import threading
from tempfile import NamedTemporaryFile
from typing import Optional, Any, Dict
-from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest
+from PyQt6.QtNetwork import QNetworkReply, QNetworkRequest
from UM.Job import Job
from UM.Logger import Logger
@@ -53,7 +53,7 @@ class RestoreBackupJob(Job):
def _onRestoreRequestCompleted(self, reply: QNetworkReply, error: Optional["QNetworkReply.NetworkError"] = None) -> None:
if not HttpRequestManager.replyIndicatesSuccess(reply, error):
Logger.warning("Requesting backup failed, response code %s while trying to connect to %s",
- reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url())
+ reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute), reply.url())
self.restore_backup_error_message = self.DEFAULT_ERROR_MESSAGE
self._job_done.set()
return
diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py
index 8636c465c0..55a9415899 100755
--- a/plugins/CuraEngineBackend/CuraEngineBackend.py
+++ b/plugins/CuraEngineBackend/CuraEngineBackend.py
@@ -4,12 +4,12 @@
import argparse #To run the engine in debug mode if the front-end is in debug mode.
from collections import defaultdict
import os
-from PyQt5.QtCore import QObject, QTimer, QUrl, pyqtSlot
+from PyQt6.QtCore import QObject, QTimer, QUrl, pyqtSlot
import sys
from time import time
from typing import Any, cast, Dict, List, Optional, Set, TYPE_CHECKING
-from PyQt5.QtGui import QDesktopServices, QImage
+from PyQt6.QtGui import QDesktopServices, QImage
from UM.Backend.Backend import Backend, BackendState
from UM.Scene.SceneNode import SceneNode
diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py
index 7e01e96b06..0e592c8d20 100644
--- a/plugins/CuraEngineBackend/StartSliceJob.py
+++ b/plugins/CuraEngineBackend/StartSliceJob.py
@@ -8,7 +8,7 @@ import time
from typing import Any, cast, Dict, List, Optional, Set
import re
import Arcus #For typing.
-from PyQt5.QtCore import QCoreApplication
+from PyQt6.QtCore import QCoreApplication
from UM.Job import Job
from UM.Logger import Logger
diff --git a/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py b/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py
index a5560f32a8..940711f19c 100644
--- a/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py
+++ b/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py
@@ -5,9 +5,9 @@ import threading
from json import JSONDecodeError
from typing import List, Dict, Any, Callable, Union, Optional
-from PyQt5.QtCore import QUrl
-from PyQt5.QtGui import QDesktopServices
-from PyQt5.QtNetwork import QNetworkReply
+from PyQt6.QtCore import QUrl
+from PyQt6.QtGui import QDesktopServices
+from PyQt6.QtNetwork import QNetworkReply
from UM.FileHandler.FileHandler import FileHandler
from UM.Logger import Logger
diff --git a/plugins/DigitalLibrary/src/DFFileUploader.py b/plugins/DigitalLibrary/src/DFFileUploader.py
index 10fee03c4c..6cad7828e2 100644
--- a/plugins/DigitalLibrary/src/DFFileUploader.py
+++ b/plugins/DigitalLibrary/src/DFFileUploader.py
@@ -1,7 +1,7 @@
# Copyright (c) 2021 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply
+from PyQt6.QtNetwork import QNetworkRequest, QNetworkReply
from typing import Callable, Any, cast, Optional, Union
from UM.Logger import Logger
@@ -120,9 +120,9 @@ class DFFileUploader:
"""
Logger.log("i", "Finished callback %s %s",
- reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url().toString())
+ reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute), reply.url().toString())
- status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) # type: Optional[int]
+ status_code = reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute) # type: Optional[int]
if not status_code:
Logger.log("e", "Reply contained no status code.")
self._onUploadError(reply, None)
diff --git a/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py b/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py
index 5301151c5f..3456638ba6 100644
--- a/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py
+++ b/plugins/DigitalLibrary/src/DigitalFactoryApiClient.py
@@ -7,7 +7,7 @@ import re
from time import time
from typing import List, Any, Optional, Union, Type, Tuple, Dict, cast, TypeVar, Callable
-from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest
+from PyQt6.QtNetwork import QNetworkReply, QNetworkRequest
from UM.Logger import Logger
from UM.TaskManagement.HttpRequestManager import HttpRequestManager
@@ -228,7 +228,7 @@ class DigitalFactoryApiClient:
self._anti_gc_callbacks.remove(parse)
# Don't try to parse the reply if we didn't get one
- if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) is None:
+ if reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute) is None:
if on_error is not None:
on_error()
return
@@ -250,7 +250,7 @@ class DigitalFactoryApiClient:
:return: A tuple with a status code and a dictionary.
"""
- status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)
+ status_code = reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute)
try:
response = bytes(reply.readAll()).decode()
return status_code, json.loads(response)
diff --git a/plugins/DigitalLibrary/src/DigitalFactoryController.py b/plugins/DigitalLibrary/src/DigitalFactoryController.py
index ba5ee48888..fa6c63e1dc 100644
--- a/plugins/DigitalLibrary/src/DigitalFactoryController.py
+++ b/plugins/DigitalLibrary/src/DigitalFactoryController.py
@@ -10,9 +10,9 @@ from enum import IntEnum
from pathlib import Path
from typing import Optional, List, Dict, Any, cast
-from PyQt5.QtCore import pyqtSignal, QObject, pyqtSlot, pyqtProperty, Q_ENUMS, QTimer, QUrl
-from PyQt5.QtNetwork import QNetworkReply
-from PyQt5.QtQml import qmlRegisterType, qmlRegisterUncreatableType
+from PyQt6.QtCore import pyqtSignal, QObject, pyqtSlot, pyqtProperty, pyqtEnum, QTimer, QUrl
+from PyQt6.QtNetwork import QNetworkReply
+from PyQt6.QtQml import qmlRegisterType, qmlRegisterUncreatableMetaObject
from UM.FileHandler.FileHandler import FileHandler
from UM.Logger import Logger
@@ -50,7 +50,7 @@ class DFRetrievalStatus(QObject):
be used within QML objects as DigitalFactory.RetrievalStatus.<status>
"""
- Q_ENUMS(RetrievalStatus)
+ pyqtEnum(RetrievalStatus)
class DigitalFactoryController(QObject):
@@ -439,7 +439,7 @@ class DigitalFactoryController(QObject):
@staticmethod
def _onEngineCreated() -> None:
- qmlRegisterUncreatableType(DFRetrievalStatus, "DigitalFactory", 1, 0, "RetrievalStatus", "Could not create RetrievalStatus enum type")
+ qmlRegisterUncreatableMetaObject(DigitalFactoryController.staticMetaObject, "DigitalFactory", 1, 0, "RetrievalStatus", "RetrievalStatus is an Enum-only type")
def _applicationInitializationFinished(self) -> None:
self._supported_file_types = self._application.getInstance().getMeshFileHandler().getSupportedFileTypesRead()
diff --git a/plugins/DigitalLibrary/src/DigitalFactoryFileModel.py b/plugins/DigitalLibrary/src/DigitalFactoryFileModel.py
index 535cce0e8f..5c030ead17 100644
--- a/plugins/DigitalLibrary/src/DigitalFactoryFileModel.py
+++ b/plugins/DigitalLibrary/src/DigitalFactoryFileModel.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import List, Dict, Callable
-from PyQt5.QtCore import Qt, pyqtSignal
+from PyQt6.QtCore import Qt, pyqtSignal
from UM.Logger import Logger
from UM.Qt.ListModel import ListModel
@@ -13,13 +13,13 @@ DIGITAL_FACTORY_DISPLAY_DATETIME_FORMAT = "%d-%m-%Y %H:%M"
class DigitalFactoryFileModel(ListModel):
- FileNameRole = Qt.UserRole + 1
- FileIdRole = Qt.UserRole + 2
- FileSizeRole = Qt.UserRole + 3
- LibraryProjectIdRole = Qt.UserRole + 4
- DownloadUrlRole = Qt.UserRole + 5
- UsernameRole = Qt.UserRole + 6
- UploadedAtRole = Qt.UserRole + 7
+ FileNameRole = Qt.ItemDataRole.UserRole + 1
+ FileIdRole = Qt.ItemDataRole.UserRole + 2
+ FileSizeRole = Qt.ItemDataRole.UserRole + 3
+ LibraryProjectIdRole = Qt.ItemDataRole.UserRole + 4
+ DownloadUrlRole = Qt.ItemDataRole.UserRole + 5
+ UsernameRole = Qt.ItemDataRole.UserRole + 6
+ UploadedAtRole = Qt.ItemDataRole.UserRole + 7
dfFileModelChanged = pyqtSignal()
diff --git a/plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py b/plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py
index d76774cab1..92aa92ef4c 100644
--- a/plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py
+++ b/plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import List, Optional
-from PyQt5.QtCore import Qt, pyqtSignal
+from PyQt6.QtCore import Qt, pyqtSignal
from UM.Logger import Logger
from UM.Qt.ListModel import ListModel
@@ -12,12 +12,12 @@ PROJECT_UPDATED_AT_DATETIME_FORMAT = "%d-%m-%Y"
class DigitalFactoryProjectModel(ListModel):
- DisplayNameRole = Qt.UserRole + 1
- LibraryProjectIdRole = Qt.UserRole + 2
- DescriptionRole = Qt.UserRole + 3
- ThumbnailUrlRole = Qt.UserRole + 5
- UsernameRole = Qt.UserRole + 6
- LastUpdatedRole = Qt.UserRole + 7
+ DisplayNameRole = Qt.ItemDataRole.UserRole + 1
+ LibraryProjectIdRole = Qt.ItemDataRole.UserRole + 2
+ DescriptionRole = Qt.ItemDataRole.UserRole + 3
+ ThumbnailUrlRole = Qt.ItemDataRole.UserRole + 5
+ UsernameRole = Qt.ItemDataRole.UserRole + 6
+ LastUpdatedRole = Qt.ItemDataRole.UserRole + 7
dfProjectModelChanged = pyqtSignal()
diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
index 8d0670c844..e7b1aef6d1 100644
--- a/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
+++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateChecker.py
@@ -1,8 +1,8 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import QUrl
-from PyQt5.QtGui import QDesktopServices
+from PyQt6.QtCore import QUrl
+from PyQt6.QtGui import QDesktopServices
from typing import Set
diff --git a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
index 35f338fb04..154b2951a1 100644
--- a/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
+++ b/plugins/FirmwareUpdater/FirmwareUpdaterMachineAction.py
@@ -8,7 +8,7 @@ from UM.i18n import i18nCatalog
from UM.Settings.ContainerRegistry import ContainerRegistry
from cura.PrinterOutput.FirmwareUpdater import FirmwareUpdateState
-from PyQt5.QtCore import pyqtSignal, pyqtProperty, QObject
+from PyQt6.QtCore import pyqtSignal, pyqtProperty, QObject
from typing import Optional
MYPY = False
diff --git a/plugins/ImageReader/ImageReader.py b/plugins/ImageReader/ImageReader.py
index 4a32ed71f1..21833177ed 100644
--- a/plugins/ImageReader/ImageReader.py
+++ b/plugins/ImageReader/ImageReader.py
@@ -5,8 +5,8 @@ import numpy
import math
-from PyQt5.QtGui import QImage, qRed, qGreen, qBlue, qAlpha
-from PyQt5.QtCore import Qt
+from PyQt6.QtGui import QImage, qRed, qGreen, qBlue, qAlpha
+from PyQt6.QtCore import Qt
from UM.Mesh.MeshReader import MeshReader
from UM.Mesh.MeshBuilder import MeshBuilder
diff --git a/plugins/ImageReader/ImageReaderUI.py b/plugins/ImageReader/ImageReaderUI.py
index 103cd6f7e8..86d990c566 100644
--- a/plugins/ImageReader/ImageReaderUI.py
+++ b/plugins/ImageReader/ImageReaderUI.py
@@ -4,7 +4,7 @@
import os
import threading
-from PyQt5.QtCore import Qt, pyqtSignal, QObject
+from PyQt6.QtCore import Qt, pyqtSignal, QObject
from UM.FlameProfiler import pyqtSlot
from UM.Application import Application
from UM.PluginRegistry import PluginRegistry
diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py
index 96bfa7062b..0f618635af 100755
--- a/plugins/MachineSettingsAction/MachineSettingsAction.py
+++ b/plugins/MachineSettingsAction/MachineSettingsAction.py
@@ -3,7 +3,7 @@
from typing import Optional, TYPE_CHECKING
-from PyQt5.QtCore import pyqtProperty
+from PyQt6.QtCore import pyqtProperty
import UM.i18n
from UM.FlameProfiler import pyqtSlot
@@ -18,7 +18,7 @@ from cura.Settings.CuraStackBuilder import CuraStackBuilder
from cura.Settings.cura_empty_instance_containers import isEmptyContainer
if TYPE_CHECKING:
- from PyQt5.QtCore import QObject
+ from PyQt6.QtCore import QObject
catalog = UM.i18n.i18nCatalog("cura")
diff --git a/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml b/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml
index db581e8cf5..32c8f8df63 100644
--- a/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml
+++ b/plugins/MachineSettingsAction/MachineSettingsPrinterTab.qml
@@ -47,7 +47,7 @@ Item
Column
{
Layout.fillWidth: true
- Layout.alignment: Qt.AlignTop
+ Layout.alignment: Qt.AlignmentFlag.AlignTop
spacing: base.columnSpacing
@@ -178,7 +178,7 @@ Item
Column
{
Layout.fillWidth: true
- Layout.alignment: Qt.AlignTop
+ Layout.alignment: Qt.AlignmentFlag.AlignTop
spacing: base.columnSpacing
diff --git a/plugins/ModelChecker/ModelChecker.py b/plugins/ModelChecker/ModelChecker.py
index 321ce8d007..b24c40546d 100644
--- a/plugins/ModelChecker/ModelChecker.py
+++ b/plugins/ModelChecker/ModelChecker.py
@@ -3,7 +3,7 @@
import os
-from PyQt5.QtCore import QObject, pyqtSlot, pyqtSignal, pyqtProperty, QTimer
+from PyQt6.QtCore import QObject, pyqtSlot, pyqtSignal, pyqtProperty, QTimer
from UM.Application import Application
from UM.Extension import Extension
diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py b/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py
index 401396f2b8..4dada26af8 100644
--- a/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py
+++ b/plugins/PerObjectSettingsTool/PerObjectSettingVisibilityHandler.py
@@ -1,7 +1,7 @@
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import pyqtProperty
+from PyQt6.QtCore import pyqtProperty
from UM.FlameProfiler import pyqtSlot
from UM.Application import Application
diff --git a/plugins/PerObjectSettingsTool/__init__.py b/plugins/PerObjectSettingsTool/__init__.py
index d3c6d236ef..9c3e5f31de 100644
--- a/plugins/PerObjectSettingsTool/__init__.py
+++ b/plugins/PerObjectSettingsTool/__init__.py
@@ -3,7 +3,7 @@
from . import PerObjectSettingsTool
from . import PerObjectSettingVisibilityHandler
-from PyQt5.QtQml import qmlRegisterType
+from PyQt6.QtQml import qmlRegisterType
from UM.i18n import i18nCatalog
i18n_catalog = i18nCatalog("cura")
diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.py b/plugins/PostProcessingPlugin/PostProcessingPlugin.py
index 8968e2c547..308de22518 100644
--- a/plugins/PostProcessingPlugin/PostProcessingPlugin.py
+++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.py
@@ -9,7 +9,7 @@ import pkgutil
import sys
from typing import Dict, Type, TYPE_CHECKING, List, Optional, cast
-from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, pyqtSlot
+from PyQt6.QtCore import QObject, pyqtProperty, pyqtSignal, pyqtSlot
from UM.Application import Application
from UM.Extension import Extension
diff --git a/plugins/PostProcessingPlugin/scripts/CreateThumbnail.py b/plugins/PostProcessingPlugin/scripts/CreateThumbnail.py
index 0ce6ac6eff..c3d1cc28c6 100644
--- a/plugins/PostProcessingPlugin/scripts/CreateThumbnail.py
+++ b/plugins/PostProcessingPlugin/scripts/CreateThumbnail.py
@@ -2,7 +2,7 @@ import base64
from UM.Logger import Logger
from cura.Snapshot import Snapshot
-from PyQt5.QtCore import QByteArray, QIODevice, QBuffer
+from PyQt6.QtCore import QByteArray, QIODevice, QBuffer
from ..Script import Script
diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py
index af6b538f26..de13851f5d 100644
--- a/plugins/SimulationView/SimulationView.py
+++ b/plugins/SimulationView/SimulationView.py
@@ -3,9 +3,9 @@
import sys
-from PyQt5.QtCore import Qt
-from PyQt5.QtGui import QOpenGLContext
-from PyQt5.QtWidgets import QApplication
+from PyQt6.QtCore import Qt
+from PyQt6.QtGui import QOpenGLContext
+from PyQt6.QtWidgets import QApplication
from UM.Application import Application
from UM.Event import Event, KeyEvent
diff --git a/plugins/SimulationView/SimulationViewProxy.py b/plugins/SimulationView/SimulationViewProxy.py
index 7d78e93ca5..669f7fdbcc 100644
--- a/plugins/SimulationView/SimulationViewProxy.py
+++ b/plugins/SimulationView/SimulationViewProxy.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import TYPE_CHECKING
-from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty
+from PyQt6.QtCore import QObject, pyqtSignal, pyqtProperty
from UM.FlameProfiler import pyqtSlot
from UM.Application import Application
diff --git a/plugins/SimulationView/__init__.py b/plugins/SimulationView/__init__.py
index 420ee60660..c3f2b1629c 100644
--- a/plugins/SimulationView/__init__.py
+++ b/plugins/SimulationView/__init__.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtQml import qmlRegisterSingletonType
+from PyQt6.QtQml import qmlRegisterSingletonType
from UM.i18n import i18nCatalog
from . import SimulationViewProxy, SimulationView
@@ -24,5 +24,5 @@ def createSimulationViewProxy(engine, script_engine):
def register(app):
simulation_view = SimulationView.SimulationView()
- qmlRegisterSingletonType(SimulationViewProxy.SimulationViewProxy, "UM", 1, 0, "SimulationView", simulation_view.getProxy)
+ qmlRegisterSingletonType(SimulationViewProxy.SimulationViewProxy, "UM", 1, 0, simulation_view.getProxy, "SimulationView")
return { "view": simulation_view}
diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py
index 0e8db0f88a..0bf76f8423 100755
--- a/plugins/SliceInfoPlugin/SliceInfo.py
+++ b/plugins/SliceInfoPlugin/SliceInfo.py
@@ -7,8 +7,8 @@ import platform
import time
from typing import cast, Optional, Set, TYPE_CHECKING
-from PyQt5.QtCore import pyqtSlot, QObject
-from PyQt5.QtNetwork import QNetworkRequest
+from PyQt6.QtCore import pyqtSlot, QObject
+from PyQt6.QtNetwork import QNetworkRequest
from UM.Extension import Extension
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
@@ -20,7 +20,7 @@ from UM.Qt.Duration import DurationFormat
from cura import ApplicationMetadata
if TYPE_CHECKING:
- from PyQt5.QtNetwork import QNetworkReply
+ from PyQt6.QtNetwork import QNetworkReply
catalog = i18nCatalog("cura")
@@ -289,7 +289,7 @@ class SliceInfo(QObject, Extension):
Logger.logException("e", "Exception raised while sending slice info.") # But we should be notified about these problems of course.
def _onRequestFinished(self, reply: "QNetworkReply") -> None:
- status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)
+ status_code = reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute)
if status_code == 200:
Logger.log("i", "SliceInfo sent successfully")
return
diff --git a/plugins/SolidView/SolidView.py b/plugins/SolidView/SolidView.py
index f12c1aae01..2dac98a70e 100644
--- a/plugins/SolidView/SolidView.py
+++ b/plugins/SolidView/SolidView.py
@@ -6,8 +6,8 @@ from UM.View.View import View
from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator
from UM.Scene.Selection import Selection
from UM.Resources import Resources
-from PyQt5.QtGui import QOpenGLContext, QDesktopServices, QImage
-from PyQt5.QtCore import QSize, QUrl
+from PyQt6.QtGui import QOpenGLContext, QDesktopServices, QImage
+from PyQt6.QtCore import QSize, QUrl
import numpy as np
import time
diff --git a/plugins/SupportEraser/SupportEraser.py b/plugins/SupportEraser/SupportEraser.py
index b64a0f4eed..d9b0aa8483 100644
--- a/plugins/SupportEraser/SupportEraser.py
+++ b/plugins/SupportEraser/SupportEraser.py
@@ -1,8 +1,8 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import Qt, QTimer
-from PyQt5.QtWidgets import QApplication
+from PyQt6.QtCore import Qt, QTimer
+from PyQt6.QtWidgets import QApplication
from UM.Application import Application
from UM.Math.Vector import Vector
@@ -31,7 +31,7 @@ import numpy
class SupportEraser(Tool):
def __init__(self):
super().__init__()
- self._shortcut_key = Qt.Key_E
+ self._shortcut_key = Qt.Key.Key_E
self._controller = self.getController()
self._selection_pass = None
diff --git a/plugins/Toolbox/resources/qml/components/ToolboxDownloadsGridTile.qml b/plugins/Toolbox/resources/qml/components/ToolboxDownloadsGridTile.qml
index c310bd7121..755907d0e7 100644
--- a/plugins/Toolbox/resources/qml/components/ToolboxDownloadsGridTile.qml
+++ b/plugins/Toolbox/resources/qml/components/ToolboxDownloadsGridTile.qml
@@ -14,7 +14,7 @@ Item
property int packageCount: (toolbox.viewCategory == "material" && model.type === undefined) ? toolbox.getTotalNumberOfMaterialPackagesByAuthor(model.id) : 1
property int installedPackages: (toolbox.viewCategory == "material" && model.type === undefined) ? toolbox.getNumberOfInstalledPackagesByAuthor(model.id) : (toolbox.isInstalled(model.id) ? 1 : 0)
height: childrenRect.height
- Layout.alignment: Qt.AlignTop | Qt.AlignLeft
+ Layout.alignment: Qt.AlignmentFlag.AlignTop | Qt.AlignmentFlag.AlignLeft
MouseArea
{
diff --git a/plugins/Toolbox/resources/qml/components/ToolboxHeader.qml b/plugins/Toolbox/resources/qml/components/ToolboxHeader.qml
index 2c43110af9..35065a137e 100644
--- a/plugins/Toolbox/resources/qml/components/ToolboxHeader.qml
+++ b/plugins/Toolbox/resources/qml/components/ToolboxHeader.qml
@@ -90,7 +90,7 @@ Item
rightMargin: UM.Theme.getSize("default_margin").width
verticalCenter: parent.verticalCenter
}
- acceptedButtons: Qt.LeftButton
+ acceptedButtons: Qt.MouseButton.LeftButton
onClicked: Qt.openUrlExternally(toolbox.getWebMarketplaceUrl("plugins") + "?utm_source=cura&utm_medium=software&utm_campaign=marketplace-button")
UM.RecolorImage
{
diff --git a/plugins/Toolbox/src/AuthorsModel.py b/plugins/Toolbox/src/AuthorsModel.py
index 04c8ed3a40..15df22317e 100644
--- a/plugins/Toolbox/src/AuthorsModel.py
+++ b/plugins/Toolbox/src/AuthorsModel.py
@@ -4,7 +4,7 @@
import re
from typing import Dict, List, Optional, Union, cast
-from PyQt5.QtCore import Qt, pyqtProperty
+from PyQt6.QtCore import Qt, pyqtProperty
from UM.Qt.ListModel import ListModel
@@ -20,14 +20,14 @@ class AuthorsModel(ListModel):
self._metadata = None # type: Optional[List[Dict[str, Union[str, List[str], int]]]]
- self.addRoleName(Qt.UserRole + 1, "id")
- self.addRoleName(Qt.UserRole + 2, "name")
- self.addRoleName(Qt.UserRole + 3, "email")
- self.addRoleName(Qt.UserRole + 4, "website")
- self.addRoleName(Qt.UserRole + 5, "package_count")
- self.addRoleName(Qt.UserRole + 6, "package_types")
- self.addRoleName(Qt.UserRole + 7, "icon_url")
- self.addRoleName(Qt.UserRole + 8, "description")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 1, "id")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 2, "name")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 3, "email")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 4, "website")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 5, "package_count")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 6, "package_types")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 7, "icon_url")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 8, "description")
# List of filters for queries. The result is the union of the each list of results.
self._filter = {} # type: Dict[str, str]
diff --git a/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py b/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py
index 6d2ed1dcbd..9f6f48efa4 100644
--- a/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py
+++ b/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py
@@ -5,8 +5,8 @@ import json
from typing import List, Dict, Any, Set
from typing import Optional
-from PyQt5.QtCore import QObject
-from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest
+from PyQt6.QtCore import QObject
+from PyQt6.QtNetwork import QNetworkReply, QNetworkRequest
from UM import i18nCatalog
from UM.Logger import Logger
@@ -70,10 +70,10 @@ class CloudPackageChecker(QObject):
scope = self._scope)
def _onUserPackagesRequestFinished(self, reply: "QNetworkReply", error: Optional["QNetworkReply.NetworkError"] = None) -> None:
- if error is not None or reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200:
+ if error is not None or reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute) != 200:
Logger.log("w",
"Requesting user packages failed, response code %s while trying to connect to %s",
- reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url())
+ reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute), reply.url())
self._application.getCuraAPI().account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.ERROR)
return
diff --git a/plugins/Toolbox/src/CloudSync/DiscrepanciesPresenter.py b/plugins/Toolbox/src/CloudSync/DiscrepanciesPresenter.py
index cee2f6318a..6fd1c8fe49 100644
--- a/plugins/Toolbox/src/CloudSync/DiscrepanciesPresenter.py
+++ b/plugins/Toolbox/src/CloudSync/DiscrepanciesPresenter.py
@@ -1,7 +1,7 @@
import os
from typing import Optional
-from PyQt5.QtCore import QObject, pyqtSlot
+from PyQt6.QtCore import QObject, pyqtSlot
from UM.Qt.QtApplication import QtApplication
from UM.Signal import Signal
diff --git a/plugins/Toolbox/src/CloudSync/DownloadPresenter.py b/plugins/Toolbox/src/CloudSync/DownloadPresenter.py
index 8a5e763f3c..e7ac682d69 100644
--- a/plugins/Toolbox/src/CloudSync/DownloadPresenter.py
+++ b/plugins/Toolbox/src/CloudSync/DownloadPresenter.py
@@ -4,7 +4,7 @@
import tempfile
from typing import Dict, List, Any
-from PyQt5.QtNetwork import QNetworkReply
+from PyQt6.QtNetwork import QNetworkReply
from UM.i18n import i18nCatalog
from UM.Logger import Logger
diff --git a/plugins/Toolbox/src/CloudSync/LicenseModel.py b/plugins/Toolbox/src/CloudSync/LicenseModel.py
index 335a91ef84..646e41c29b 100644
--- a/plugins/Toolbox/src/CloudSync/LicenseModel.py
+++ b/plugins/Toolbox/src/CloudSync/LicenseModel.py
@@ -1,4 +1,4 @@
-from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal
+from PyQt6.QtCore import QObject, pyqtProperty, pyqtSignal
from UM.i18n import i18nCatalog
catalog = i18nCatalog("cura")
diff --git a/plugins/Toolbox/src/CloudSync/LicensePresenter.py b/plugins/Toolbox/src/CloudSync/LicensePresenter.py
index 39ce11c8d3..7efbe0eb2a 100644
--- a/plugins/Toolbox/src/CloudSync/LicensePresenter.py
+++ b/plugins/Toolbox/src/CloudSync/LicensePresenter.py
@@ -5,7 +5,7 @@ import os
from collections import OrderedDict
from typing import Dict, Optional, List, Any
-from PyQt5.QtCore import QObject, pyqtSlot
+from PyQt6.QtCore import QObject, pyqtSlot
from UM.Logger import Logger
from UM.PackageManager import PackageManager
diff --git a/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py b/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py
index db16c5ea84..6fc68cfca4 100644
--- a/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py
+++ b/plugins/Toolbox/src/CloudSync/SubscribedPackagesModel.py
@@ -1,7 +1,7 @@
# Copyright (c) 2020 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import Qt, pyqtProperty, pyqtSlot
+from PyQt6.QtCore import Qt, pyqtProperty, pyqtSlot
from UM.PackageManager import PackageManager
from UM.Qt.ListModel import ListModel
@@ -20,11 +20,11 @@ class SubscribedPackagesModel(ListModel):
self._discrepancies = None
self._sdk_version = ApplicationMetadata.CuraSDKVersion
- self.addRoleName(Qt.UserRole + 1, "package_id")
- self.addRoleName(Qt.UserRole + 2, "display_name")
- self.addRoleName(Qt.UserRole + 3, "icon_url")
- self.addRoleName(Qt.UserRole + 4, "is_compatible")
- self.addRoleName(Qt.UserRole + 5, "is_dismissed")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 1, "package_id")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 2, "display_name")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 3, "icon_url")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 4, "is_compatible")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 5, "is_dismissed")
@pyqtProperty(bool, constant=True)
def hasCompatiblePackages(self) -> bool:
diff --git a/plugins/Toolbox/src/ConfigsModel.py b/plugins/Toolbox/src/ConfigsModel.py
index a53817653f..a02e4e49f4 100644
--- a/plugins/Toolbox/src/ConfigsModel.py
+++ b/plugins/Toolbox/src/ConfigsModel.py
@@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import Qt
+from PyQt6.QtCore import Qt
from UM.Qt.ListModel import ListModel
@@ -14,11 +14,11 @@ class ConfigsModel(ListModel):
self._configs = None
- self.addRoleName(Qt.UserRole + 1, "machine")
- self.addRoleName(Qt.UserRole + 2, "print_core")
- self.addRoleName(Qt.UserRole + 3, "build_plate")
- self.addRoleName(Qt.UserRole + 4, "support_material")
- self.addRoleName(Qt.UserRole + 5, "quality")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 1, "machine")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 2, "print_core")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 3, "build_plate")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 4, "support_material")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 5, "quality")
def setConfigs(self, configs):
self._configs = configs
diff --git a/plugins/Toolbox/src/PackagesModel.py b/plugins/Toolbox/src/PackagesModel.py
index 97645ae466..8234fdfba6 100644
--- a/plugins/Toolbox/src/PackagesModel.py
+++ b/plugins/Toolbox/src/PackagesModel.py
@@ -4,7 +4,7 @@
import re
from typing import Dict
-from PyQt5.QtCore import Qt, pyqtProperty
+from PyQt6.QtCore import Qt, pyqtProperty
from UM.Logger import Logger
from UM.Qt.ListModel import ListModel
@@ -23,28 +23,28 @@ class PackagesModel(ListModel):
self._metadata = None
- self.addRoleName(Qt.UserRole + 1, "id")
- self.addRoleName(Qt.UserRole + 2, "type")
- self.addRoleName(Qt.UserRole + 3, "name")
- self.addRoleName(Qt.UserRole + 4, "version")
- self.addRoleName(Qt.UserRole + 5, "author_id")
- self.addRoleName(Qt.UserRole + 6, "author_name")
- self.addRoleName(Qt.UserRole + 7, "author_email")
- self.addRoleName(Qt.UserRole + 8, "description")
- self.addRoleName(Qt.UserRole + 9, "icon_url")
- self.addRoleName(Qt.UserRole + 10, "image_urls")
- self.addRoleName(Qt.UserRole + 11, "download_url")
- self.addRoleName(Qt.UserRole + 12, "last_updated")
- self.addRoleName(Qt.UserRole + 13, "is_bundled")
- self.addRoleName(Qt.UserRole + 14, "is_active")
- self.addRoleName(Qt.UserRole + 15, "is_installed") # Scheduled pkgs are included in the model but should not be marked as actually installed
- self.addRoleName(Qt.UserRole + 16, "has_configs")
- self.addRoleName(Qt.UserRole + 17, "supported_configs")
- self.addRoleName(Qt.UserRole + 18, "download_count")
- self.addRoleName(Qt.UserRole + 19, "tags")
- self.addRoleName(Qt.UserRole + 20, "links")
- self.addRoleName(Qt.UserRole + 21, "website")
- self.addRoleName(Qt.UserRole + 22, "login_required")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 1, "id")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 2, "type")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 3, "name")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 4, "version")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 5, "author_id")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 6, "author_name")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 7, "author_email")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 8, "description")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 9, "icon_url")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 10, "image_urls")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 11, "download_url")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 12, "last_updated")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 13, "is_bundled")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 14, "is_active")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 15, "is_installed") # Scheduled pkgs are included in the model but should not be marked as actually installed
+ self.addRoleName(Qt.ItemDataRole.UserRole + 16, "has_configs")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 17, "supported_configs")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 18, "download_count")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 19, "tags")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 20, "links")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 21, "website")
+ self.addRoleName(Qt.ItemDataRole.UserRole + 22, "login_required")
# List of filters for queries. The result is the union of the each list of results.
self._filter = {} # type: Dict[str, str]
diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py
index e525a88d89..44b62b64af 100644
--- a/plugins/Toolbox/src/Toolbox.py
+++ b/plugins/Toolbox/src/Toolbox.py
@@ -6,8 +6,8 @@ import os
import tempfile
from typing import cast, Any, Dict, List, Set, TYPE_CHECKING, Tuple, Optional, Union
-from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, pyqtSlot
-from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
+from PyQt6.QtCore import QObject, pyqtProperty, pyqtSignal, pyqtSlot
+from PyQt6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
from UM.Extension import Extension
from UM.Logger import Logger
@@ -589,11 +589,11 @@ class Toolbox(QObject, Extension):
self.setViewPage("errored")
def _onDataRequestFinished(self, request_type: str, reply: "QNetworkReply") -> None:
- if reply.operation() != QNetworkAccessManager.GetOperation:
+ if reply.operation() != QNetworkAccessManager.Operation.GetOperation:
Logger.log("e", "_onDataRequestFinished() only handles GET requests but got [%s] instead", reply.operation())
return
- http_status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)
+ http_status_code = reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute)
if http_status_code != 200:
Logger.log("e", "Request type [%s] got non-200 HTTP response: [%s]", http_status_code)
self.setViewPage("errored")
@@ -650,7 +650,7 @@ class Toolbox(QObject, Extension):
def _onDownloadFinished(self, reply: "QNetworkReply") -> None:
self.resetDownload()
- if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200:
+ if reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute) != 200:
try:
reply_error = json.loads(reply.readAll().data().decode("utf-8"))
except Exception as e:
diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py
index 455a7c3c36..fdd8fd98ea 100644
--- a/plugins/UFPWriter/UFPWriter.py
+++ b/plugins/UFPWriter/UFPWriter.py
@@ -8,7 +8,7 @@ from Charon.OpenMode import OpenMode # To indicate that we want to write to UFP
from Charon.filetypes.OpenPackagingConvention import OPCError
from io import StringIO # For converting g-code to bytes.
-from PyQt5.QtCore import QBuffer
+from PyQt6.QtCore import QBuffer
from UM.Logger import Logger
from UM.Mesh.MeshWriter import MeshWriter # The writer we need to implement.
diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py
index 7b8be4b2c2..470e57947e 100644
--- a/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py
+++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py
@@ -5,8 +5,8 @@ from json import JSONDecodeError
from time import time
from typing import Callable, List, Type, TypeVar, Union, Optional, Tuple, Dict, Any, cast
-from PyQt5.QtCore import QUrl
-from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply
+from PyQt6.QtCore import QUrl
+from PyQt6.QtNetwork import QNetworkRequest, QNetworkReply
from UM.Logger import Logger
from UM.TaskManagement.HttpRequestManager import HttpRequestManager
@@ -165,7 +165,7 @@ class CloudApiClient:
request = QNetworkRequest(QUrl(path))
if content_type:
- request.setHeader(QNetworkRequest.ContentTypeHeader, content_type)
+ request.setHeader(QNetworkRequest.KnownHeaders.ContentTypeHeader, content_type)
access_token = self._account.accessToken
if access_token:
request.setRawHeader(b"Authorization", "Bearer {}".format(access_token).encode())
@@ -179,7 +179,7 @@ class CloudApiClient:
:return: A tuple with a status code and a dictionary.
"""
- status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)
+ status_code = reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute)
try:
response = bytes(reply.readAll()).decode()
return status_code, json.loads(response)
@@ -233,7 +233,7 @@ class CloudApiClient:
self._anti_gc_callbacks.remove(parse)
# Don't try to parse the reply if we didn't get one
- if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) is None:
+ if reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute) is None:
if on_error is not None:
on_error()
return
diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py
index 85e802215c..8c45ce537f 100644
--- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py
+++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDevice.py
@@ -5,9 +5,9 @@ from time import time
import os
from typing import cast, List, Optional, TYPE_CHECKING
-from PyQt5.QtCore import QObject, QUrl, pyqtProperty, pyqtSignal, pyqtSlot
-from PyQt5.QtGui import QDesktopServices
-from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest # Parse errors specific to print job uploading.
+from PyQt6.QtCore import QObject, QUrl, pyqtProperty, pyqtSignal, pyqtSlot
+from PyQt6.QtGui import QDesktopServices
+from PyQt6.QtNetwork import QNetworkReply, QNetworkRequest # Parse errors specific to print job uploading.
from UM import i18nCatalog
from UM.Backend.Backend import BackendState
@@ -272,7 +272,7 @@ class CloudOutputDevice(UltimakerNetworkedPrinterOutputDevice):
"""
Displays a message when an error occurs specific to uploading print job (i.e. queue is full).
"""
- error_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)
+ error_code = reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute)
if error_code == 409:
PrintJobUploadQueueFullMessage().show()
else:
diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py
index 8eecafd49c..931fdee154 100644
--- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py
+++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py
@@ -4,8 +4,8 @@
import os
from typing import Dict, List, Optional, Set
-from PyQt5.QtNetwork import QNetworkReply
-from PyQt5.QtWidgets import QMessageBox
+from PyQt6.QtNetwork import QNetworkReply
+from PyQt6.QtWidgets import QMessageBox
from UM import i18nCatalog
from UM.Logger import Logger # To log errors talking to the API.
diff --git a/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py b/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py
index 5a3e2474a8..1881d90923 100644
--- a/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py
+++ b/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py
@@ -1,7 +1,7 @@
# Copyright (c) 2019 Ultimaker B.V.
# !/usr/bin/env python
# -*- coding: utf-8 -*-
-from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply
+from PyQt6.QtNetwork import QNetworkRequest, QNetworkReply
from typing import Callable, Any, Tuple, cast, Dict, Optional
from UM.Logger import Logger
@@ -106,9 +106,9 @@ class ToolPathUploader:
"""Checks whether a chunk of data was uploaded successfully, starting the next chunk if needed."""
Logger.log("i", "Finished callback %s %s",
- reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url().toString())
+ reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute), reply.url().toString())
- status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) # type: Optional[int]
+ status_code = reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute) # type: Optional[int]
if not status_code:
Logger.log("e", "Reply contained no status code.")
self._errorCallback(reply, None)
diff --git a/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py b/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py
index 34687339a9..05609070a2 100644
--- a/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py
+++ b/plugins/UM3NetworkPrinting/src/Messages/CloudFlowMessage.py
@@ -2,8 +2,8 @@
# Cura is released under the terms of the LGPLv3 or higher.
import os
-from PyQt5.QtCore import QUrl
-from PyQt5.QtGui import QDesktopServices
+from PyQt6.QtCore import QUrl
+from PyQt6.QtGui import QDesktopServices
from UM import i18nCatalog
from UM.Message import Message
diff --git a/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py b/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py
index 059b81b39e..3b00f24672 100644
--- a/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py
+++ b/plugins/UM3NetworkPrinting/src/Messages/NotClusterHostMessage.py
@@ -2,8 +2,8 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import TYPE_CHECKING
-from PyQt5.QtCore import QUrl
-from PyQt5.QtGui import QDesktopServices
+from PyQt6.QtCore import QUrl
+from PyQt6.QtGui import QDesktopServices
from UM import i18nCatalog
from UM.Message import Message
diff --git a/plugins/UM3NetworkPrinting/src/Models/ConfigurationChangeModel.py b/plugins/UM3NetworkPrinting/src/Models/ConfigurationChangeModel.py
index 58fae03679..6de08afb65 100644
--- a/plugins/UM3NetworkPrinting/src/Models/ConfigurationChangeModel.py
+++ b/plugins/UM3NetworkPrinting/src/Models/ConfigurationChangeModel.py
@@ -1,6 +1,6 @@
# Copyright (c) 2019 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
-from PyQt5.QtCore import pyqtProperty, QObject
+from PyQt6.QtCore import pyqtProperty, QObject
BLOCKING_CHANGE_TYPES = [
diff --git a/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterStatus.py b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterStatus.py
index b5fae5d9c7..16b4b6d656 100644
--- a/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterStatus.py
+++ b/plugins/UM3NetworkPrinting/src/Models/Http/ClusterPrinterStatus.py
@@ -3,7 +3,7 @@
from itertools import product
from typing import List, Union, Dict, Optional, Any
-from PyQt5.QtCore import QUrl
+from PyQt6.QtCore import QUrl
from cura.PrinterOutput.Models.PrinterConfigurationModel import PrinterConfigurationModel
from cura.PrinterOutput.PrinterOutputController import PrinterOutputController
diff --git a/plugins/UM3NetworkPrinting/src/Models/UM3PrintJobOutputModel.py b/plugins/UM3NetworkPrinting/src/Models/UM3PrintJobOutputModel.py
index b063a2bf5b..85651244f9 100644
--- a/plugins/UM3NetworkPrinting/src/Models/UM3PrintJobOutputModel.py
+++ b/plugins/UM3NetworkPrinting/src/Models/UM3PrintJobOutputModel.py
@@ -2,9 +2,9 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import List, Optional
-from PyQt5.QtCore import pyqtProperty, pyqtSignal
-from PyQt5.QtGui import QImage
-from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest
+from PyQt6.QtCore import pyqtProperty, pyqtSignal
+from PyQt6.QtGui import QImage
+from PyQt6.QtNetwork import QNetworkReply, QNetworkRequest
from UM.Logger import Logger
from UM.TaskManagement.HttpRequestManager import HttpRequestManager
@@ -42,6 +42,6 @@ class UM3PrintJobOutputModel(PrintJobOutputModel):
def _onImageLoaded(self, reply: QNetworkReply, error: Optional["QNetworkReply.NetworkError"] = None) -> None:
if not HttpRequestManager.replyIndicatesSuccess(reply, error):
Logger.warning("Requesting preview image failed, response code {0} while trying to connect to {1}".format(
- reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url()))
+ reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute), reply.url()))
return
self.updatePreviewImageData(reply.readAll())
diff --git a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py
index d1840bf90c..b3df000f7b 100644
--- a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py
+++ b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py
@@ -4,8 +4,8 @@ import json
from json import JSONDecodeError
from typing import Callable, List, Optional, Dict, Union, Any, Type, cast, TypeVar, Tuple
-from PyQt5.QtCore import QUrl
-from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
+from PyQt6.QtCore import QUrl
+from PyQt6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
from UM.Logger import Logger
@@ -118,9 +118,9 @@ class ClusterApiClient:
"""
url = QUrl("http://" + self._address + path)
request = QNetworkRequest(url)
- request.setAttribute(QNetworkRequest.FollowRedirectsAttribute, True)
+ request.setAttribute(QNetworkRequest.Attribute.RedirectPolicyAttribute, QNetworkRequest.RedirectPolicy.ManualRedirectPolicy)
if content_type:
- request.setHeader(QNetworkRequest.ContentTypeHeader, content_type)
+ request.setHeader(QNetworkRequest.KnownHeaders.ContentTypeHeader, content_type)
return request
@staticmethod
@@ -130,7 +130,7 @@ class ClusterApiClient:
:param reply: The reply from the server.
:return: A tuple with a status code and a dictionary.
"""
- status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)
+ status_code = reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute)
try:
response = bytes(reply.readAll()).decode()
return status_code, json.loads(response)
@@ -173,7 +173,7 @@ class ClusterApiClient:
self._anti_gc_callbacks.remove(parse)
# Don't try to parse the reply if we didn't get one
- if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) is None:
+ if reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute) is None:
return
if reply.error() > 0:
diff --git a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py
index 9288b4c4b0..2d27b7c3be 100644
--- a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py
+++ b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py
@@ -3,9 +3,9 @@
import os
from typing import Optional, Dict, List, Callable, Any
-from PyQt5.QtGui import QDesktopServices
-from PyQt5.QtCore import pyqtSlot, QUrl, pyqtSignal, pyqtProperty, QObject
-from PyQt5.QtNetwork import QNetworkReply
+from PyQt6.QtGui import QDesktopServices
+from PyQt6.QtCore import pyqtSlot, QUrl, pyqtSignal, pyqtProperty, QObject
+from PyQt6.QtNetwork import QNetworkReply
from UM.FileHandler.FileHandler import FileHandler
from UM.i18n import i18nCatalog
diff --git a/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py b/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py
index 877eaebcb7..32e20892ac 100644
--- a/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py
+++ b/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
import os
from typing import Dict, TYPE_CHECKING, Set, List
-from PyQt5.QtNetwork import QNetworkReply, QNetworkRequest
+from PyQt6.QtNetwork import QNetworkReply, QNetworkRequest
from UM.Job import Job
from UM.Logger import Logger
@@ -152,7 +152,7 @@ class SendMaterialJob(Job):
def _sendingFinished(self, reply: QNetworkReply) -> None:
"""Check a reply from an upload to the printer and log an error when the call failed"""
- if reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) != 200:
+ if reply.attribute(QNetworkRequest.Attribute.HttpStatusCodeAttribute) != 200:
Logger.log("w", "Error while syncing material: %s", reply.errorString())
return
body = reply.readAll().data().decode('utf8')
diff --git a/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py b/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py
index 772a9d1973..12b0fa56bf 100644
--- a/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py
+++ b/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterAction.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
from typing import Optional, cast
-from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty, QObject
+from PyQt6.QtCore import pyqtSlot, pyqtSignal, pyqtProperty, QObject
from UM import i18nCatalog
from cura.CuraApplication import CuraApplication
diff --git a/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterOutputDevice.py
index c9231d71ee..769e92610a 100644
--- a/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterOutputDevice.py
+++ b/plugins/UM3NetworkPrinting/src/UltimakerNetworkedPrinterOutputDevice.py
@@ -4,7 +4,7 @@ import os
from time import time
from typing import List, Optional, Dict
-from PyQt5.QtCore import pyqtProperty, pyqtSignal, QObject, pyqtSlot, QUrl
+from PyQt6.QtCore import pyqtProperty, pyqtSignal, QObject, pyqtSlot, QUrl
from UM.Logger import Logger
from UM.Qt.Duration import Duration, DurationFormat
diff --git a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py
index 1e9b46cb1c..5d68d9f544 100644
--- a/plugins/USBPrinting/USBPrinterOutputDeviceManager.py
+++ b/plugins/USBPrinting/USBPrinterOutputDeviceManager.py
@@ -7,7 +7,7 @@ import serial.tools.list_ports
from os import environ
from re import search
-from PyQt5.QtCore import QObject, pyqtSignal
+from PyQt6.QtCore import QObject, pyqtSignal
from UM.Signal import Signal, signalemitter
from UM.OutputDevice.OutputDevicePlugin import OutputDevicePlugin
@@ -30,9 +30,10 @@ class USBPrinterOutputDeviceManager(QObject, OutputDevicePlugin):
def __init__(self, application, parent = None):
if USBPrinterOutputDeviceManager.__instance is not None:
raise RuntimeError("Try to create singleton '%s' more than once" % self.__class__.__name__)
- USBPrinterOutputDeviceManager.__instance = self
super().__init__(parent = parent)
+ USBPrinterOutputDeviceManager.__instance = self
+
self._application = application
self._serial_port_list = []
diff --git a/plugins/UltimakerMachineActions/UMOUpgradeSelection.py b/plugins/UltimakerMachineActions/UMOUpgradeSelection.py
index 62eab75986..0703731d64 100644
--- a/plugins/UltimakerMachineActions/UMOUpgradeSelection.py
+++ b/plugins/UltimakerMachineActions/UMOUpgradeSelection.py
@@ -3,7 +3,7 @@
from UM.Settings.ContainerRegistry import ContainerRegistry
from cura.MachineAction import MachineAction
-from PyQt5.QtCore import pyqtSlot, pyqtSignal, pyqtProperty
+from PyQt6.QtCore import pyqtSlot, pyqtSignal, pyqtProperty
from UM.i18n import i18nCatalog
from UM.Application import Application
diff --git a/plugins/VersionUpgrade/VersionUpgrade44to45/VersionUpgrade44to45.py b/plugins/VersionUpgrade/VersionUpgrade44to45/VersionUpgrade44to45.py
index 00faa216eb..bc372c1428 100644
--- a/plugins/VersionUpgrade/VersionUpgrade44to45/VersionUpgrade44to45.py
+++ b/plugins/VersionUpgrade/VersionUpgrade44to45/VersionUpgrade44to45.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2020 Ultimaker B.V.
+# Copyright (c) 2022 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher.
import configparser
@@ -33,18 +33,20 @@ class VersionUpgrade44to45(VersionUpgrade):
In this case the plug-in will also check for stacks that need to be
deleted.
"""
+ super().__init__()
# Only delete hidden stacks when upgrading from version 4.4. Not 4.3 or 4.5, just when you're starting out from 4.4.
# If you're starting from an earlier version, you can't have had the bug that produces too many hidden stacks (https://github.com/Ultimaker/Cura/issues/6731).
# If you're starting from a later version, the bug was already fixed.
data_storage_root = os.path.dirname(Resources.getDataStoragePath())
- folders = set(os.listdir(data_storage_root)) # All version folders.
- folders = set(filter(lambda p: re.fullmatch(r"\d+\.\d+", p), folders)) # Only folders with a correct version number as name.
- folders.difference_update({os.path.basename(Resources.getDataStoragePath())}) # Remove current version from candidates (since the folder was just copied).
- if folders:
- latest_version = max(folders, key = Version) # Sort them by semantic version numbering.
- if latest_version == "4.4":
- self.removeHiddenStacks()
+ if os.path.exists(data_storage_root):
+ folders = set(os.listdir(data_storage_root)) # All version folders.
+ folders = set(filter(lambda p: re.fullmatch(r"\d+\.\d+", p), folders)) # Only folders with a correct version number as name.
+ folders.difference_update({os.path.basename(Resources.getDataStoragePath())}) # Remove current version from candidates (since the folder was just copied).
+ if folders:
+ latest_version = max(folders, key = Version) # Sort them by semantic version numbering.
+ if latest_version == "4.4":
+ self.removeHiddenStacks()
def removeHiddenStacks(self) -> None:
"""
diff --git a/plugins/XRayView/XRayView.py b/plugins/XRayView/XRayView.py
index be4fe5ea76..5af7b17652 100644
--- a/plugins/XRayView/XRayView.py
+++ b/plugins/XRayView/XRayView.py
@@ -2,7 +2,7 @@
# Cura is released under the terms of the LGPLv3 or higher.
import os.path
-from PyQt5.QtGui import QOpenGLContext, QImage
+from PyQt6.QtGui import QOpenGLContext, QImage
from UM.Application import Application
from UM.Logger import Logger
diff --git a/plugins/XmlMaterialProfile/PluginInfo.py b/plugins/XmlMaterialProfile/PluginInfo.py
index 4b78a47a5e..b88bea21eb 100644
--- a/plugins/XmlMaterialProfile/PluginInfo.py
+++ b/plugins/XmlMaterialProfile/PluginInfo.py
@@ -5,9 +5,9 @@ class PluginInfo(PluginObject):
__instance = None # type: PluginInfo
def __init__(self, *args, **kwags):
- super().__init__(*args, **kwags)
if PluginInfo.__instance is not None:
raise RuntimeError("Try to create singleton '%s' more than once" % self.__class__.__name__)
+ super().__init__(*args, **kwags)
PluginInfo.__instance = self
@classmethod
diff --git a/resources/qml/Cura.qml b/resources/qml/Cura.qml
index eb78240d64..94574116ec 100644
--- a/resources/qml/Cura.qml
+++ b/resources/qml/Cura.qml
@@ -152,7 +152,7 @@ UM.MainWindow
//DeleteSelection on the keypress backspace event
Keys.onPressed:
{
- if (event.key == Qt.Key_Backspace)
+ if (event.key == Qt.Key.Key_Backspace)
{
Cura.Actions.deleteSelection.trigger()
}
diff --git a/resources/qml/Preferences/Materials/MaterialsSyncDialog.qml b/resources/qml/Preferences/Materials/MaterialsSyncDialog.qml
index d7d158eef2..bfae40e4f1 100644
--- a/resources/qml/Preferences/Materials/MaterialsSyncDialog.qml
+++ b/resources/qml/Preferences/Materials/MaterialsSyncDialog.qml
@@ -574,7 +574,7 @@ Window
source: UM.Theme.getImage("3d_printer_faded")
sourceSize.width: width
fillMode: Image.PreserveAspectFit
- Layout.alignment: Qt.AlignHCenter
+ Layout.alignment: Qt.AlignmentFlag.AlignHCenter
Layout.preferredWidth: parent.width / 3
}
Label
diff --git a/resources/qml/Preferences/Materials/MaterialsView.qml b/resources/qml/Preferences/Materials/MaterialsView.qml
index 2c68973e55..eca869bd1e 100644
--- a/resources/qml/Preferences/Materials/MaterialsView.qml
+++ b/resources/qml/Preferences/Materials/MaterialsView.qml
@@ -125,7 +125,7 @@ TabView
onRejected: no()
}
- Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Display Name") }
+ Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignmentFlag.AlignVCenter; text: catalog.i18nc("@label", "Display Name") }
ReadOnlyTextField
{
id: displayNameTextField;
@@ -135,7 +135,7 @@ TabView
onEditingFinished: base.updateMaterialDisplayName(properties.name, text)
}
- Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Brand") }
+ Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignmentFlag.AlignVCenter; text: catalog.i18nc("@label", "Brand") }
ReadOnlyTextField
{
id: brandTextField;
@@ -145,7 +145,7 @@ TabView
onEditingFinished: base.updateMaterialBrand(properties.brand, text)
}
- Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Material Type") }
+ Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignmentFlag.AlignVCenter; text: catalog.i18nc("@label", "Material Type") }
ReadOnlyTextField
{
id: materialTypeField;
@@ -155,7 +155,7 @@ TabView
onEditingFinished: base.updateMaterialType(properties.material, text)
}
- Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Color") }
+ Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignmentFlag.AlignVCenter; text: catalog.i18nc("@label", "Color") }
Row
{
width: scrollView.columnWidth
@@ -205,9 +205,9 @@ TabView
Item { width: parent.width; height: UM.Theme.getSize("default_margin").height }
- Label { width: parent.width; height: parent.rowHeight; font.bold: true; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Properties") }
+ Label { width: parent.width; height: parent.rowHeight; font.bold: true; verticalAlignment: Qt.AlignmentFlag.AlignVCenter; text: catalog.i18nc("@label", "Properties") }
- Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Density") }
+ Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignmentFlag.AlignVCenter; text: catalog.i18nc("@label", "Density") }
ReadOnlySpinBox
{
id: densitySpinBox
@@ -222,7 +222,7 @@ TabView
onValueChanged: updateCostPerMeter()
}
- Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Diameter") }
+ Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignmentFlag.AlignVCenter; text: catalog.i18nc("@label", "Diameter") }
ReadOnlySpinBox
{
id: diameterSpinBox
@@ -256,7 +256,7 @@ TabView
onValueChanged: updateCostPerMeter()
}
- Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Filament Cost") }
+ Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignmentFlag.AlignVCenter; text: catalog.i18nc("@label", "Filament Cost") }
SpinBox
{
id: spoolCostSpinBox
@@ -273,7 +273,7 @@ TabView
}
}
- Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Filament weight") }
+ Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignmentFlag.AlignVCenter; text: catalog.i18nc("@label", "Filament weight") }
SpinBox
{
id: spoolWeightSpinBox
@@ -291,21 +291,21 @@ TabView
}
}
- Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Filament length") }
+ Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignmentFlag.AlignVCenter; text: catalog.i18nc("@label", "Filament length") }
Label
{
width: scrollView.columnWidth
text: "~ %1 m".arg(Math.round(base.spoolLength))
- verticalAlignment: Qt.AlignVCenter
+ verticalAlignment: Qt.AlignmentFlag.AlignVCenter
height: parent.rowHeight
}
- Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Cost per Meter") }
+ Label { width: scrollView.columnWidth; height: parent.rowHeight; verticalAlignment: Qt.AlignmentFlag.AlignVCenter; text: catalog.i18nc("@label", "Cost per Meter") }
Label
{
width: scrollView.columnWidth
text: "~ %1 %2/m".arg(base.costPerMeter.toFixed(2)).arg(base.currency)
- verticalAlignment: Qt.AlignVCenter
+ verticalAlignment: Qt.AlignmentFlag.AlignVCenter
height: parent.rowHeight
}
@@ -313,7 +313,7 @@ TabView
Label
{
width: 2 * scrollView.columnWidth
- verticalAlignment: Qt.AlignVCenter
+ verticalAlignment: Qt.AlignmentFlag.AlignVCenter
text: catalog.i18nc("@label", "This material is linked to %1 and shares some of its properties.").arg(base.linkedMaterialNames)
wrapMode: Text.WordWrap
visible: unlinkMaterialButton.visible
@@ -332,7 +332,7 @@ TabView
Item { width: parent.width; height: UM.Theme.getSize("default_margin").height }
- Label { width: parent.width; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Description") }
+ Label { width: parent.width; height: parent.rowHeight; verticalAlignment: Qt.AlignmentFlag.AlignVCenter; text: catalog.i18nc("@label", "Description") }
ReadOnlyTextArea
{
@@ -345,7 +345,7 @@ TabView
onEditingFinished: base.setMetaDataEntry("description", properties.description, text)
}
- Label { width: parent.width; height: parent.rowHeight; verticalAlignment: Qt.AlignVCenter; text: catalog.i18nc("@label", "Adhesion Information") }
+ Label { width: parent.width; height: parent.rowHeight; verticalAlignment: Qt.AlignmentFlag.AlignVCenter; text: catalog.i18nc("@label", "Adhesion Information") }
ReadOnlyTextArea
{
@@ -405,7 +405,7 @@ TabView
height: spinBox.height + UM.Theme.getSize("default_lining").height
text: model.label
elide: Text.ElideRight
- verticalAlignment: Qt.AlignVCenter
+ verticalAlignment: Qt.AlignmentFlag.AlignVCenter
}
ReadOnlySpinBox
{
diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml
index 0470e91faa..7ed05b26f6 100644
--- a/resources/qml/Settings/SettingItem.qml
+++ b/resources/qml/Settings/SettingItem.qml
@@ -100,7 +100,7 @@ Item
anchors.fill: parent
- acceptedButtons: Qt.RightButton
+ acceptedButtons: Qt.MouseButton.RightButton
hoverEnabled: true;
onClicked: base.contextMenuRequested()
diff --git a/resources/qml/WelcomePages/WhatsNewContent.qml b/resources/qml/WelcomePages/WhatsNewContent.qml
index 179fc372c9..b0fc3d0965 100644
--- a/resources/qml/WelcomePages/WhatsNewContent.qml
+++ b/resources/qml/WelcomePages/WhatsNewContent.qml
@@ -67,7 +67,7 @@ Item
Rectangle
{
- Layout.alignment: Qt.AlignHCenter
+ Layout.alignment: Qt.AlignmentFlag.AlignHCenter
color: UM.Theme.getColor("viewport_overlay")
width: whatsNewViewport.width
height: whatsNewViewport.height
diff --git a/tests/PrinterOutput/TestNetworkedPrinterOutputDevice.py b/tests/PrinterOutput/TestNetworkedPrinterOutputDevice.py
index 2a5cc8a2d5..984051d589 100644
--- a/tests/PrinterOutput/TestNetworkedPrinterOutputDevice.py
+++ b/tests/PrinterOutput/TestNetworkedPrinterOutputDevice.py
@@ -4,8 +4,8 @@
import time
from unittest.mock import MagicMock, patch
-from PyQt5.QtNetwork import QNetworkAccessManager
-from PyQt5.QtCore import QUrl
+from PyQt6.QtNetwork import QNetworkAccessManager
+from PyQt6.QtCore import QUrl
from cura.PrinterOutput.NetworkedPrinterOutputDevice import NetworkedPrinterOutputDevice, AuthState
from cura.PrinterOutput.PrinterOutputDevice import ConnectionState
@@ -43,7 +43,7 @@ def test_post():
# Create a fake reply (we can't use a QReply, since those are abstract C++)
reply = MagicMock()
- reply.operation = MagicMock(return_value=QNetworkAccessManager.PostOperation)
+ reply.operation = MagicMock(return_value=QNetworkAccessManager.Operation.PostOperation)
reply.url = MagicMock(return_value=QUrl("127.0.0.1"))
mocked_network_manager.post = MagicMock(return_value = reply)
@@ -65,7 +65,7 @@ def test_get():
# Create a fake reply (we can't use a QReply, since those are abstract C++)
reply = MagicMock()
- reply.operation = MagicMock(return_value=QNetworkAccessManager.PostOperation)
+ reply.operation = MagicMock(return_value=QNetworkAccessManager.Operation.PostOperation)
reply.url = MagicMock(return_value=QUrl("127.0.0.1"))
mocked_network_manager.get = MagicMock(return_value=reply)
@@ -87,7 +87,7 @@ def test_delete():
# Create a fake reply (we can't use a QReply, since those are abstract C++)
reply = MagicMock()
- reply.operation = MagicMock(return_value=QNetworkAccessManager.PostOperation)
+ reply.operation = MagicMock(return_value=QNetworkAccessManager.Operation.PostOperation)
reply.url = MagicMock(return_value=QUrl("127.0.0.1"))
mocked_network_manager.deleteResource = MagicMock(return_value=reply)
@@ -109,7 +109,7 @@ def test_put():
# Create a fake reply (we can't use a QReply, since those are abstract C++)
reply = MagicMock()
- reply.operation = MagicMock(return_value=QNetworkAccessManager.PostOperation)
+ reply.operation = MagicMock(return_value=QNetworkAccessManager.Operation.PostOperation)
reply.url = MagicMock(return_value=QUrl("127.0.0.1"))
mocked_network_manager.put = MagicMock(return_value = reply)
diff --git a/tests/Settings/TestContainerManager.py b/tests/Settings/TestContainerManager.py
index 19ade68f68..36409ba414 100644
--- a/tests/Settings/TestContainerManager.py
+++ b/tests/Settings/TestContainerManager.py
@@ -1,7 +1,7 @@
from unittest import TestCase
from unittest.mock import MagicMock
-from PyQt5.QtCore import QUrl
+from PyQt6.QtCore import QUrl
from unittest.mock import patch
from UM.MimeTypeDatabase import MimeTypeDatabase
from cura.Settings.ContainerManager import ContainerManager
diff --git a/tests/TestOAuth2.py b/tests/TestOAuth2.py
index 7d0a4bc5c4..09fa555af4 100644
--- a/tests/TestOAuth2.py
+++ b/tests/TestOAuth2.py
@@ -4,8 +4,8 @@
from datetime import datetime
from unittest.mock import MagicMock, Mock, patch
-from PyQt5.QtGui import QDesktopServices
-from PyQt5.QtNetwork import QNetworkReply
+from PyQt6.QtGui import QDesktopServices
+from PyQt6.QtNetwork import QNetworkReply
from UM.Preferences import Preferences
from cura.OAuth2.AuthorizationHelpers import AuthorizationHelpers, TOKEN_TIMESTAMP_FORMAT