diff --git a/.gitignore b/.gitignore index e1dc6c6c..926aeb17 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ # virtual enviroment -env/* -venv/* +venv/ +.venv*/ # sphinx documentation docs/_build/ diff --git a/NodeGraphQt/base/commands.py b/NodeGraphQt/base/commands.py index fffdb4ce..0dbd16cd 100644 --- a/NodeGraphQt/base/commands.py +++ b/NodeGraphQt/base/commands.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtWidgets +from qtpy import QtWidgets from NodeGraphQt.constants import PortTypeEnum diff --git a/NodeGraphQt/base/graph.py b/NodeGraphQt/base/graph.py index 0bfeadc5..1ced9e8b 100644 --- a/NodeGraphQt/base/graph.py +++ b/NodeGraphQt/base/graph.py @@ -6,7 +6,7 @@ import re from pathlib import Path -from Qt import QtCore, QtWidgets +from qtpy import QtCore, QtWidgets, QtGui from NodeGraphQt.base.commands import (NodeAddedCmd, NodesRemovedCmd, @@ -151,7 +151,7 @@ def __init__(self, parent=None, **kwargs): kwargs.get('node_factory') or NodeFactory()) self._undo_view = None self._undo_stack = ( - kwargs.get('undo_stack') or QtWidgets.QUndoStack(self) + kwargs.get('undo_stack') or QtGui.QUndoStack(self) ) self._widget = None self._sub_graphs = {} @@ -521,8 +521,8 @@ def widget(self): # hide the close button on the first tab. tab_bar = self._widget.tabBar() tab_flags = [ - QtWidgets.QTabBar.RightSide, - QtWidgets.QTabBar.LeftSide + QtWidgets.QTabBar.ButtonPosition.RightSide, + QtWidgets.QTabBar.ButtonPosition.LeftSide ] for btn_flag in tab_flags: tab_btn = tab_bar.tabButton(0, btn_flag) diff --git a/NodeGraphQt/base/menu.py b/NodeGraphQt/base/menu.py index b2777a46..b405d26f 100644 --- a/NodeGraphQt/base/menu.py +++ b/NodeGraphQt/base/menu.py @@ -1,8 +1,7 @@ #!/usr/bin/python import re -from distutils.version import LooseVersion -from Qt import QtGui, QtCore +from qtpy import QtGui, QtCore from NodeGraphQt.errors import NodeMenuError from NodeGraphQt.widgets.actions import BaseMenu, GraphAction, NodeAction @@ -120,10 +119,10 @@ def _set_shortcut(action, shortcut): shortcut = getattr(QtGui.QKeySequence, search.group(1)) elif all([i in ['Alt', 'Enter'] for i in shortcut.split('+')]): shortcut = QtGui.QKeySequence( - QtCore.Qt.ALT | QtCore.Qt.Key_Return + QtCore.Qt.Modifier.ALT | QtCore.Qt.Key.Key_Return ) elif all([i in ['Return', 'Enter'] for i in shortcut.split('+')]): - shortcut = QtCore.Qt.Key_Return + shortcut = QtCore.Qt.Key.Key_Return if shortcut: action.setShortcut(shortcut) @@ -141,8 +140,7 @@ def add_command(self, name, func=None, shortcut=None): """ action = GraphAction(name, self._graph.viewer()) action.graph = self._graph - if LooseVersion(QtCore.qVersion()) >= LooseVersion('5.10'): - action.setShortcutVisibleInContextMenu(True) + action.setShortcutVisibleInContextMenu(True) if shortcut: self._set_shortcut(action, shortcut) @@ -218,8 +216,6 @@ def add_command(self, name, func=None, node_type=None, node_class=None, action = NodeAction(name, self._graph.viewer()) action.graph = self._graph - if LooseVersion(QtCore.qVersion()) >= LooseVersion('5.10'): - action.setShortcutVisibleInContextMenu(True) if shortcut: self._set_shortcut(action, shortcut) diff --git a/NodeGraphQt/constants.py b/NodeGraphQt/constants.py index 6679d848..af0c412e 100644 --- a/NodeGraphQt/constants.py +++ b/NodeGraphQt/constants.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- import os -from Qt import QtWidgets +from qtpy import QtWidgets from enum import Enum from .pkg_info import __version__ as _v diff --git a/NodeGraphQt/custom_widgets/nodes_palette.py b/NodeGraphQt/custom_widgets/nodes_palette.py index 305d59dd..670e91f3 100644 --- a/NodeGraphQt/custom_widgets/nodes_palette.py +++ b/NodeGraphQt/custom_widgets/nodes_palette.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- from collections import defaultdict -from Qt import QtWidgets, QtCore, QtGui +from qtpy import QtWidgets, QtCore, QtGui from NodeGraphQt.constants import MIME_TYPE, URN_SCHEME @@ -34,7 +34,7 @@ def paint(self, painter, option, index): ) painter.save() - painter.setRenderHint(QtGui.QPainter.Antialiasing, True) + painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing, True) # background. bg_color = option.palette.window().color() @@ -44,21 +44,21 @@ def paint(self, painter, option, index): pen_color = pen_color.lighter(160) pen = QtGui.QPen(pen_color, 3.0) - pen.setCapStyle(QtCore.Qt.RoundCap) + pen.setCapStyle(QtCore.Qt.PenCapStyle.RoundCap) painter.setPen(pen) painter.setBrush(QtGui.QBrush(bg_color)) painter.drawRoundedRect(base_rect, int(base_rect.height()/radius), int(base_rect.width()/radius)) - if option.state & QtWidgets.QStyle.State_Selected: + if option.state & QtWidgets.QStyle.StateFlag.State_Selected: pen_color = option.palette.highlight().color() else: pen_color = option.palette.midlight().color().darker(130) pen = QtGui.QPen(pen_color, 1.0) - pen.setCapStyle(QtCore.Qt.RoundCap) + pen.setCapStyle(QtCore.Qt.PenCapStyle.RoundCap) painter.setPen(pen) - painter.setBrush(QtCore.Qt.NoBrush) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) sub_margin = 6 sub_rect = QtCore.QRectF( @@ -97,7 +97,7 @@ def paint(self, painter, option, index): # text pen_color = option.palette.text().color() pen = QtGui.QPen(pen_color, 0.5) - pen.setCapStyle(QtCore.Qt.RoundCap) + pen.setCapStyle(QtCore.Qt.PenCapStyle.RoundCap) painter.setPen(pen) font = painter.font() @@ -123,7 +123,7 @@ def __init__(self, parent=None): def mimeData(self, indexes, p_int=None): node_ids = [ - 'node:{}'.format(i.data(QtCore.Qt.ToolTipRole)) + 'node:{}'.format(i.data(QtCore.Qt.ItemDataRole.ToolTipRole)) for i in indexes ] node_urn = URN_SCHEME + ';'.join(node_ids) @@ -136,11 +136,11 @@ class NodesGridView(QtWidgets.QListView): def __init__(self, parent=None): super(NodesGridView, self).__init__(parent) - self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + self.setSelectionMode(QtWidgets.QAbstractItemView.SelectionMode.ExtendedSelection) self.setUniformItemSizes(True) - self.setResizeMode(QtWidgets.QListView.Adjust) - self.setViewMode(QtWidgets.QListView.IconMode) - self.setDragDropMode(QtWidgets.QListView.DragOnly) + self.setResizeMode(QtWidgets.QListView.ResizeMode.Adjust) + self.setViewMode(QtWidgets.QListView.ViewMode.IconMode) + self.setDragDropMode(QtWidgets.QListView.DragDropMode.DragOnly) self.setDragEnabled(True) self.setMinimumSize(300, 100) self.setSpacing(4) diff --git a/NodeGraphQt/custom_widgets/nodes_tree.py b/NodeGraphQt/custom_widgets/nodes_tree.py index b0f9ba63..95126cf0 100644 --- a/NodeGraphQt/custom_widgets/nodes_tree.py +++ b/NodeGraphQt/custom_widgets/nodes_tree.py @@ -1,6 +1,6 @@ #!/usr/bin/python # -*- coding: utf-8 -*- -from Qt import QtWidgets, QtCore, QtGui +from qtpy import QtWidgets, QtCore, QtGui from NodeGraphQt.constants import MIME_TYPE, URN_SCHEME @@ -50,8 +50,8 @@ class NodesTreeWidget(QtWidgets.QTreeWidget): def __init__(self, parent=None, node_graph=None): super(NodesTreeWidget, self).__init__(parent) - self.setDragDropMode(QtWidgets.QAbstractItemView.DragOnly) - self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + self.setDragDropMode(QtWidgets.QAbstractItemView.DragDropMode.DragOnly) + self.setSelectionMode(QtWidgets.QAbstractItemView.SelectionMode.ExtendedSelection) self.setHeaderHidden(True) self.setWindowTitle('Nodes') @@ -93,7 +93,7 @@ def _build_tree(self): label = '{}'.format(category) cat_item = _BaseNodeTreeItem(self, [label], type=TYPE_CATEGORY) cat_item.setFirstColumnSpanned(True) - cat_item.setFlags(QtCore.Qt.ItemIsEnabled) + cat_item.setFlags(QtCore.Qt.ItemFlag.ItemIsEnabled) cat_item.setSizeHint(0, QtCore.QSize(100, 26)) self.addTopLevelItem(cat_item) cat_item.setExpanded(True) diff --git a/NodeGraphQt/custom_widgets/properties_bin/custom_widget_color_picker.py b/NodeGraphQt/custom_widgets/properties_bin/custom_widget_color_picker.py index b622ba66..e93750e2 100644 --- a/NodeGraphQt/custom_widgets/properties_bin/custom_widget_color_picker.py +++ b/NodeGraphQt/custom_widgets/properties_bin/custom_widget_color_picker.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtWidgets, QtCore, QtGui +from qtpy import QtWidgets, QtCore, QtGui from .custom_widget_vectors import PropVector3, PropVector4 from .prop_widgets_abstract import BaseProperty @@ -27,8 +27,8 @@ def __init__(self, parent=None): layout = QtWidgets.QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) - layout.addWidget(self._button, 0, QtCore.Qt.AlignLeft) - layout.addWidget(self._vector, 1, QtCore.Qt.AlignLeft) + layout.addWidget(self._button, 0, QtCore.Qt.AlignmentFlag.AlignLeft) + layout.addWidget(self._vector, 1, QtCore.Qt.AlignmentFlag.AlignLeft) def _on_vector_changed(self, _, value): self._color = tuple(value) @@ -99,8 +99,8 @@ def __init__(self, parent=None): layout = QtWidgets.QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) - layout.addWidget(self._button, 0, QtCore.Qt.AlignLeft) - layout.addWidget(self._vector, 1, QtCore.Qt.AlignLeft) + layout.addWidget(self._button, 0, QtCore.Qt.AlignmentFlag.AlignLeft) + layout.addWidget(self._vector, 1, QtCore.Qt.AlignmentFlag.AlignLeft) def _update_color(self): c = [int(max(min(i, 255), 0)) for i in self._color] diff --git a/NodeGraphQt/custom_widgets/properties_bin/custom_widget_file_paths.py b/NodeGraphQt/custom_widgets/properties_bin/custom_widget_file_paths.py index 349bc5d1..b2b94096 100644 --- a/NodeGraphQt/custom_widgets/properties_bin/custom_widget_file_paths.py +++ b/NodeGraphQt/custom_widgets/properties_bin/custom_widget_file_paths.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtWidgets, QtCore +from qtpy import QtWidgets, QtCore from NodeGraphQt.widgets.dialogs import FileDialog from .prop_widgets_abstract import BaseProperty @@ -14,7 +14,7 @@ class PropFilePath(BaseProperty): def __init__(self, parent=None): super(PropFilePath, self).__init__(parent) self._ledit = QtWidgets.QLineEdit() - self._ledit.setAlignment(QtCore.Qt.AlignLeft) + self._ledit.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeft) self._ledit.editingFinished.connect(self._on_value_change) self._ledit.clearFocus() diff --git a/NodeGraphQt/custom_widgets/properties_bin/custom_widget_slider.py b/NodeGraphQt/custom_widgets/properties_bin/custom_widget_slider.py index 781dd3b9..17dd2fa7 100644 --- a/NodeGraphQt/custom_widgets/properties_bin/custom_widget_slider.py +++ b/NodeGraphQt/custom_widgets/properties_bin/custom_widget_slider.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtWidgets, QtCore +from qtpy import QtWidgets, QtCore from .prop_widgets_abstract import BaseProperty @@ -21,11 +21,11 @@ def __init__(self, parent=None, disable_scroll=True, realtime_update=False): self._init_signal_connections() def _init(self): - self._slider.setOrientation(QtCore.Qt.Horizontal) - self._slider.setTickPosition(QtWidgets.QSlider.TicksBelow) - self._slider.setSizePolicy(QtWidgets.QSizePolicy.Expanding, - QtWidgets.QSizePolicy.Preferred) - self._spinbox.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons) + self._slider.setOrientation(QtCore.Qt.Orientation.Horizontal) + self._slider.setTickPosition(QtWidgets.QSlider.TickPosition.TicksBelow) + self._slider.setSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, + QtWidgets.QSizePolicy.Policy.Preferred) + self._spinbox.setButtonSymbols(QtWidgets.QAbstractSpinBox.ButtonSymbols.NoButtons) layout = QtWidgets.QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self._spinbox) diff --git a/NodeGraphQt/custom_widgets/properties_bin/custom_widget_value_edit.py b/NodeGraphQt/custom_widgets/properties_bin/custom_widget_value_edit.py index 495e5f99..007c033e 100644 --- a/NodeGraphQt/custom_widgets/properties_bin/custom_widget_value_edit.py +++ b/NodeGraphQt/custom_widgets/properties_bin/custom_widget_value_edit.py @@ -1,7 +1,7 @@ #!/usr/bin/python import re -from Qt import QtWidgets, QtCore, QtGui +from qtpy import QtWidgets, QtCore, QtGui _NUMB_REGEX = re.compile(r'^((?:\-)*\d+)*([\.,])*(\d+(?:[eE](?:[\-\+])*\d+)*)*') @@ -122,7 +122,7 @@ def mouseMoveEvent(self, event): super(_NumberValueEdit, self).mouseMoveEvent(event) def mousePressEvent(self, event): - if event.button() == QtCore.Qt.MiddleButton: + if event.button() == QtCore.Qt.MouseButton.MiddleButton: self._MMB_STATE = True self._reset_previous_x() self._menu.exec_(QtGui.QCursor.pos()) @@ -135,9 +135,9 @@ def mouseReleaseEvent(self, event): def keyPressEvent(self, event): super(_NumberValueEdit, self).keyPressEvent(event) - if event.key() == QtCore.Qt.Key_Up: + if event.key() == QtCore.Qt.Key.Key_Up: return - elif event.key() == QtCore.Qt.Key_Down: + elif event.key() == QtCore.Qt.Key.Key_Down: return # private @@ -192,14 +192,14 @@ def set_data_type(self, data_type): """ self._data_type = data_type if data_type is int: - regexp = QtCore.QRegExp(r'\d+') - validator = QtGui.QRegExpValidator(regexp, self) + regexp = QtCore.QRegularExpression(r'\d+') + validator = QtGui.QRegularExpressionValidator(regexp, self) steps = [1, 10, 100, 1000] self._min = None if self._min is None else int(self._min) self._max = None if self._max is None else int(self._max) elif data_type is float: - regexp = QtCore.QRegExp(r'\d+[\.,]\d+(?:[eE](?:[\-\+]|)\d+)*') - validator = QtGui.QRegExpValidator(regexp, self) + regexp = QtCore.QRegularExpression(r'\d+[\.,]\d+(?:[eE](?:[\-\+]|)\d+)*') + validator = QtGui.QRegularExpressionValidator(regexp, self) steps = [0.001, 0.01, 0.1, 1] self._min = None if self._min is None else float(self._min) self._max = None if self._max is None else float(self._max) diff --git a/NodeGraphQt/custom_widgets/properties_bin/custom_widget_vectors.py b/NodeGraphQt/custom_widgets/properties_bin/custom_widget_vectors.py index 26f13b98..3c1d918e 100644 --- a/NodeGraphQt/custom_widgets/properties_bin/custom_widget_vectors.py +++ b/NodeGraphQt/custom_widgets/properties_bin/custom_widget_vectors.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtWidgets +from qtpy import QtWidgets from .custom_widget_value_edit import _NumberValueEdit from .prop_widgets_abstract import BaseProperty diff --git a/NodeGraphQt/custom_widgets/properties_bin/node_property_widgets.py b/NodeGraphQt/custom_widgets/properties_bin/node_property_widgets.py index da607740..086a78a5 100644 --- a/NodeGraphQt/custom_widgets/properties_bin/node_property_widgets.py +++ b/NodeGraphQt/custom_widgets/properties_bin/node_property_widgets.py @@ -1,7 +1,7 @@ #!/usr/bin/python from collections import defaultdict -from Qt import QtWidgets, QtCore, QtGui, QtCompat +from qtpy import QtWidgets, QtCore, QtGui from .node_property_factory import NodePropertyWidgetFactory from .prop_widgets_base import PropLineEdit @@ -17,7 +17,7 @@ def paint(self, painter, option, index): index (QtCore.QModelIndex): """ painter.save() - painter.setRenderHint(QtGui.QPainter.Antialiasing, False) + painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing, False) painter.setPen(QtCore.Qt.NoPen) # draw background. @@ -54,13 +54,13 @@ def __init__(self, parent=None): self.verticalHeader().hide() self.horizontalHeader().hide() - QtCompat.QHeaderView.setSectionResizeMode( - self.verticalHeader(), QtWidgets.QHeaderView.ResizeToContents + QtWidgets.QHeaderView.setSectionResizeMode( + self.verticalHeader(), QtWidgets.QHeaderView.ResizeMode.ResizeToContents ) - QtCompat.QHeaderView.setSectionResizeMode( - self.horizontalHeader(), 0, QtWidgets.QHeaderView.Stretch + QtWidgets.QHeaderView.setSectionResizeMode( + self.horizontalHeader(), 0, QtWidgets.QHeaderView.ResizeMode.Stretch ) - self.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollPerPixel) + self.setVerticalScrollMode(QtWidgets.QAbstractItemView.ScrollMode.ScrollPerPixel) def wheelEvent(self, event): """ @@ -120,9 +120,9 @@ def add_widget(self, name, widget, value, label=None, tooltip=None): if row > 0: row += 1 - label_flags = QtCore.Qt.AlignCenter | QtCore.Qt.AlignRight + label_flags = QtCore.Qt.AlignmentFlag.AlignCenter | QtCore.Qt.AlignmentFlag.AlignRight if widget.__class__.__name__ == 'PropTextEdit': - label_flags = label_flags | QtCore.Qt.AlignTop + label_flags = label_flags | QtCore.Qt.AlignmentFlag.AlignTop self.__layout.addWidget(label_widget, row, 0, label_flags) self.__layout.addWidget(widget, row, 1) @@ -218,7 +218,7 @@ def _build_tree_group(title): tree_widget.setHeaderLabels(headers) tree_widget.setHeaderHidden(False) tree_widget.header().setStretchLastSection(False) - QtCompat.QHeaderView.setSectionResizeMode( + QtWidgets.QHeaderView.setSectionResizeMode( tree_widget.header(), 2, QtWidgets.QHeaderView.Stretch ) @@ -317,7 +317,7 @@ def __init__(self, parent=None, node=None): close_btn = QtWidgets.QPushButton() close_btn.setIcon(QtGui.QIcon( self.style().standardPixmap( - QtWidgets.QStyle.SP_DialogCloseButton + QtWidgets.QStyle.StandardPixmap.SP_DialogCloseButton ) )) close_btn.setMaximumWidth(40) @@ -331,7 +331,7 @@ def __init__(self, parent=None, node=None): self.name_wgt.value_changed.connect(self._on_property_changed) self.type_wgt = QtWidgets.QLabel(node.type_) - self.type_wgt.setAlignment(QtCore.Qt.AlignRight) + self.type_wgt.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight) self.type_wgt.setToolTip( 'type_\nNode type identifier followed by the class name.' ) @@ -688,7 +688,7 @@ def __on_port_tree_visible_changed(self, node_id, visible, tree_widget): tree_widget.setVisible(visible) widget = self._prop_list.cellWidget(items[0].row(), 0) widget.adjustSize() - QtCompat.QHeaderView.setSectionResizeMode( + QtWidgets.QHeaderView.setSectionResizeMode( self._prop_list.verticalHeader(), QtWidgets.QHeaderView.ResizeToContents ) @@ -701,7 +701,7 @@ def __on_prop_close(self, node_id): Args: node_id (str): node id. """ - items = self._prop_list.findItems(node_id, QtCore.Qt.MatchExactly) + items = self._prop_list.findItems(node_id, QtCore.Qt.MatchFlag.MatchExactly) [self._prop_list.removeRow(i.row()) for i in items] def __on_limit_changed(self, value): @@ -802,7 +802,7 @@ def add_node(self, node): if rows >= self.limit(): self._prop_list.removeRow(rows - 1) - itm_find = self._prop_list.findItems(node.id, QtCore.Qt.MatchExactly) + itm_find = self._prop_list.findItems(node.id, QtCore.Qt.MatchFlag.MatchExactly) if itm_find: self._prop_list.removeRow(itm_find[0].row()) @@ -867,7 +867,7 @@ def get_property_editor_widget(self, node): NodePropEditorWidget: node property editor widget. """ node_id = node if isinstance(node, str) else node.id - itm_find = self._prop_list.findItems(node_id, QtCore.Qt.MatchExactly) + itm_find = self._prop_list.findItems(node_id, QtCore.Qt.MatchFlag.MatchExactly) if itm_find: item = itm_find[0] return self._prop_list.cellWidget(item.row(), 0) diff --git a/NodeGraphQt/custom_widgets/properties_bin/prop_widgets_abstract.py b/NodeGraphQt/custom_widgets/properties_bin/prop_widgets_abstract.py index b78b9c7e..5d60dc5d 100644 --- a/NodeGraphQt/custom_widgets/properties_bin/prop_widgets_abstract.py +++ b/NodeGraphQt/custom_widgets/properties_bin/prop_widgets_abstract.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtWidgets, QtCore +from qtpy import QtWidgets, QtCore class BaseProperty(QtWidgets.QWidget): diff --git a/NodeGraphQt/custom_widgets/properties_bin/prop_widgets_base.py b/NodeGraphQt/custom_widgets/properties_bin/prop_widgets_base.py index acd8f55c..01e517ab 100644 --- a/NodeGraphQt/custom_widgets/properties_bin/prop_widgets_base.py +++ b/NodeGraphQt/custom_widgets/properties_bin/prop_widgets_base.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtWidgets, QtCore +from qtpy import QtWidgets, QtCore class PropLabel(QtWidgets.QLabel): @@ -161,7 +161,7 @@ def get_value(self): def set_value(self, value): if value != self.get_value(): - idx = self.findText(value, QtCore.Qt.MatchExactly) + idx = self.findText(value, QtCore.Qt.MatchFlag.MatchExactly) self.setCurrentIndex(idx) if idx >= 0: self.value_changed.emit(self.get_name(), value) @@ -213,7 +213,7 @@ class PropSpinBox(QtWidgets.QSpinBox): def __init__(self, parent=None): super(PropSpinBox, self).__init__(parent) self._name = None - self.setButtonSymbols(self.NoButtons) + self.setButtonSymbols(self.ButtonSymbols.NoButtons) self.valueChanged.connect(self._on_value_change) def __repr__(self): @@ -248,7 +248,7 @@ class PropDoubleSpinBox(QtWidgets.QDoubleSpinBox): def __init__(self, parent=None): super(PropDoubleSpinBox, self).__init__(parent) self._name = None - self.setButtonSymbols(self.NoButtons) + self.setButtonSymbols(self.ButtonSymbols.NoButtons) self.valueChanged.connect(self._on_value_change) def __repr__(self): diff --git a/NodeGraphQt/qgraphics/node_abstract.py b/NodeGraphQt/qgraphics/node_abstract.py index 2724ebdc..98872a44 100644 --- a/NodeGraphQt/qgraphics/node_abstract.py +++ b/NodeGraphQt/qgraphics/node_abstract.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtCore, QtWidgets +from qtpy import QtCore, QtWidgets from NodeGraphQt.constants import ( Z_VAL_NODE, @@ -17,8 +17,8 @@ class AbstractNodeItem(QtWidgets.QGraphicsItem): def __init__(self, name='node', parent=None): super(AbstractNodeItem, self).__init__(parent) self.setFlags( - QtWidgets.QGraphicsItem.ItemIsSelectable | - QtWidgets.QGraphicsItem.ItemIsMovable + QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsSelectable | + QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsMovable ) self.setCacheMode(ITEM_CACHE_MODE) self.setZValue(Z_VAL_NODE) diff --git a/NodeGraphQt/qgraphics/node_backdrop.py b/NodeGraphQt/qgraphics/node_backdrop.py index 6ff2236a..d0f59c57 100644 --- a/NodeGraphQt/qgraphics/node_backdrop.py +++ b/NodeGraphQt/qgraphics/node_backdrop.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtGui, QtCore, QtWidgets +from qtpy import QtGui, QtCore, QtWidgets from NodeGraphQt.constants import Z_VAL_BACKDROP, NodeEnum from NodeGraphQt.qgraphics.node_abstract import AbstractNodeItem @@ -18,10 +18,10 @@ class BackdropSizer(QtWidgets.QGraphicsItem): def __init__(self, parent=None, size=6.0): super(BackdropSizer, self).__init__(parent) - self.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable, True) - self.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable, True) - self.setFlag(QtWidgets.QGraphicsItem.ItemSendsScenePositionChanges, True) - self.setCursor(QtGui.QCursor(QtCore.Qt.SizeFDiagCursor)) + self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsSelectable, True) + self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsMovable, True) + self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemSendsScenePositionChanges, True) + self.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.SizeFDiagCursor)) self.setToolTip('double-click auto resize') self._size = size @@ -38,7 +38,7 @@ def boundingRect(self): return QtCore.QRectF(0.5, 0.5, self._size, self._size) def itemChange(self, change, value): - if change == QtWidgets.QGraphicsItem.ItemPositionChange: + if change == QtWidgets.QGraphicsItem.GraphicsItemChange.ItemPositionChange: item = self.parentItem() mx, my = item.minimum_size x = mx if value.x() < mx else value.x() @@ -95,7 +95,7 @@ def paint(self, painter, option, widget): path.lineTo(rect.bottomRight()) path.lineTo(rect.bottomLeft()) painter.setBrush(color) - painter.setPen(QtCore.Qt.NoPen) + painter.setPen(QtCore.Qt.PenStyle.NoPen) painter.fillPath(path, painter.brush()) painter.restore() @@ -133,13 +133,13 @@ def mouseDoubleClickEvent(self, event): super(BackdropNodeItem, self).mouseDoubleClickEvent(event) def mousePressEvent(self, event): - if event.button() == QtCore.Qt.LeftButton: + if event.button() == QtCore.Qt.MouseButton.LeftButton: pos = event.scenePos() rect = QtCore.QRectF(pos.x() - 5, pos.y() - 5, 10, 10) item = self.scene().items(rect)[0] if isinstance(item, (PortItem, PipeItem)): - self.setFlag(self.ItemIsMovable, False) + self.setFlag(self.GraphicsItemFlag.ItemIsMovable, False) return if self.selected: return @@ -152,7 +152,7 @@ def mousePressEvent(self, event): def mouseReleaseEvent(self, event): super(BackdropNodeItem, self).mouseReleaseEvent(event) - self.setFlag(QtWidgets.QGraphicsItem.ItemIsMovable, True) + self.setFlag(QtWidgets.QGraphicsItemFlag.ItemIsMovable, True) [n.setSelected(True) for n in self._nodes] self._nodes = [self] @@ -184,8 +184,8 @@ def paint(self, painter, option, widget): widget (QtWidgets.QWidget): not used. """ painter.save() - painter.setPen(QtCore.Qt.NoPen) - painter.setBrush(QtCore.Qt.NoBrush) + painter.setPen(QtCore.Qt.PenStyle.NoPen) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) margin = 1.0 rect = self.boundingRect() @@ -197,12 +197,12 @@ def paint(self, painter, option, widget): radius = 2.6 color = (self.color[0], self.color[1], self.color[2], 50) painter.setBrush(QtGui.QColor(*color)) - painter.setPen(QtCore.Qt.NoPen) + painter.setPen(QtCore.Qt.PenStyle.NoPen) painter.drawRoundedRect(rect, radius, radius) top_rect = QtCore.QRectF(rect.x(), rect.y(), rect.width(), 26.0) painter.setBrush(QtGui.QBrush(QtGui.QColor(*self.color))) - painter.setPen(QtCore.Qt.NoPen) + painter.setPen(QtCore.Qt.PenStyle.NoPen) painter.drawRoundedRect(top_rect, radius, radius) for pos in [top_rect.left(), top_rect.right() - 5.0]: painter.drawRect( @@ -215,35 +215,35 @@ def paint(self, painter, option, widget): rect.width() - 5.0, rect.height()) painter.setPen(QtGui.QColor(*self.text_color)) painter.drawText(txt_rect, - QtCore.Qt.AlignLeft | QtCore.Qt.TextWordWrap, + QtCore.Qt.AlignmentFlag.AlignLeft | QtCore.Qt.TextFlag.TextWordWrap, self.backdrop_text) if self.selected: sel_color = [x for x in NodeEnum.SELECTED_COLOR.value] sel_color[-1] = 15 painter.setBrush(QtGui.QColor(*sel_color)) - painter.setPen(QtCore.Qt.NoPen) + painter.setPen(QtCore.Qt.PenStyle.NoPen) painter.drawRoundedRect(rect, radius, radius) txt_rect = QtCore.QRectF(top_rect.x(), top_rect.y(), rect.width(), top_rect.height()) painter.setPen(QtGui.QColor(*self.text_color)) - painter.drawText(txt_rect, QtCore.Qt.AlignCenter, self.name) + painter.drawText(txt_rect, QtCore.Qt.AlignmentFlag.AlignCenter, self.name) border = 0.8 border_color = self.color if self.selected and NodeEnum.SELECTED_BORDER_COLOR.value: border = 1.0 border_color = NodeEnum.SELECTED_BORDER_COLOR.value - painter.setBrush(QtCore.Qt.NoBrush) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) painter.setPen(QtGui.QPen(QtGui.QColor(*border_color), border)) painter.drawRoundedRect(rect, radius, radius) painter.restore() def get_nodes(self, inc_intersects=False): - mode = {True: QtCore.Qt.IntersectsItemShape, - False: QtCore.Qt.ContainsItemShape} + mode = {True: QtCore.Qt.ItemSelectionMode.IntersectsItemShape, + False: QtCore.Qt.ItemSelectionMode.ContainsItemShape} nodes = [] if self.scene(): polygon = self.mapToScene(self.boundingRect()) diff --git a/NodeGraphQt/qgraphics/node_base.py b/NodeGraphQt/qgraphics/node_base.py index 2428102d..bdfdb824 100644 --- a/NodeGraphQt/qgraphics/node_base.py +++ b/NodeGraphQt/qgraphics/node_base.py @@ -1,7 +1,7 @@ #!/usr/bin/python from collections import OrderedDict -from Qt import QtGui, QtCore, QtWidgets +from qtpy import QtGui, QtCore, QtWidgets from NodeGraphQt.constants import ( ITEM_CACHE_MODE, @@ -34,11 +34,11 @@ def __init__(self, name='node', parent=None): if pixmap.size().height() > NodeEnum.ICON_SIZE.value: pixmap = pixmap.scaledToHeight( NodeEnum.ICON_SIZE.value, - QtCore.Qt.SmoothTransformation + QtCore.Qt.TransformationMode.SmoothTransformation ) self._properties['icon'] = ICON_NODE_BASE self._icon_item = QtWidgets.QGraphicsPixmapItem(pixmap, self) - self._icon_item.setTransformationMode(QtCore.Qt.SmoothTransformation) + self._icon_item.setTransformationMode(QtCore.Qt.TransformationMode.SmoothTransformation) self._text_item = NodeTextItem(self.name, self) self._x_item = XDisabledItem(self, 'DISABLED') self._input_items = OrderedDict() @@ -69,8 +69,8 @@ def post_init(self, viewer, pos=None): def _paint_horizontal(self, painter, option, widget): painter.save() - painter.setPen(QtCore.Qt.NoPen) - painter.setBrush(QtCore.Qt.NoBrush) + painter.setPen(QtCore.Qt.PenStyle.NoPen) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) # base background. margin = 1.0 @@ -119,7 +119,7 @@ def _paint_horizontal(self, painter, option, widget): pen.setCosmetic(self.viewer().get_zoom() < 0.0) path = QtGui.QPainterPath() path.addRoundedRect(border_rect, radius, radius) - painter.setBrush(QtCore.Qt.NoBrush) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) painter.setPen(pen) painter.drawPath(path) @@ -127,8 +127,8 @@ def _paint_horizontal(self, painter, option, widget): def _paint_vertical(self, painter, option, widget): painter.save() - painter.setPen(QtCore.Qt.NoPen) - painter.setBrush(QtCore.Qt.NoBrush) + painter.setPen(QtCore.Qt.PenStyle.NoPen) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) # base background. margin = 1.0 @@ -174,7 +174,7 @@ def _paint_vertical(self, painter, option, widget): pen = QtGui.QPen(border_color, border_width) pen.setCosmetic(self.viewer().get_zoom() < 0.0) - painter.setBrush(QtCore.Qt.NoBrush) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) painter.setPen(pen) painter.drawRoundedRect(border_rect, radius, radius) @@ -205,7 +205,7 @@ def mousePressEvent(self, event): Args: event (QtWidgets.QGraphicsSceneMouseEvent): mouse event. """ - if event.button() == QtCore.Qt.LeftButton: + if event.button() == QtCore.Qt.MouseButton.LeftButton: for p in self._input_items.keys(): if p.hovered: event.ignore() @@ -223,7 +223,7 @@ def mouseReleaseEvent(self, event): Args: event (QtWidgets.QGraphicsSceneMouseEvent): mouse event. """ - if event.modifiers() == QtCore.Qt.AltModifier: + if event.modifiers() == QtCore.Qt.KeyboardModifier.AltModifier: event.ignore() return super(NodeItem, self).mouseReleaseEvent(event) @@ -235,7 +235,7 @@ def mouseDoubleClickEvent(self, event): Args: event (QtWidgets.QGraphicsSceneMouseEvent): mouse event. """ - if event.button() == QtCore.Qt.LeftButton: + if event.button() == QtCore.Qt.MouseButton.LeftButton: if not self.disabled: # enable text item edit mode. items = self.scene().items(event.scenePos()) @@ -258,7 +258,7 @@ def itemChange(self, change, value): change: value: """ - if change == QtWidgets.QGraphicsItem.ItemSelectedChange and self.scene(): + if change == QtWidgets.QGraphicsItem.GraphicsItemChange.ItemSelectedChange and self.scene(): self.reset_pipes() if value: self.highlight_pipes() @@ -802,7 +802,7 @@ def icon(self, path=None): if pixmap.size().height() > NodeEnum.ICON_SIZE.value: pixmap = pixmap.scaledToHeight( NodeEnum.ICON_SIZE.value, - QtCore.Qt.SmoothTransformation + QtCore.Qt.TransformationMode.SmoothTransformation ) self._icon_item.setPixmap(pixmap) if self.scene(): diff --git a/NodeGraphQt/qgraphics/node_circle.py b/NodeGraphQt/qgraphics/node_circle.py index d17fe216..2554b93f 100644 --- a/NodeGraphQt/qgraphics/node_circle.py +++ b/NodeGraphQt/qgraphics/node_circle.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtCore, QtGui, QtWidgets +from qtpy import QtCore, QtGui, QtWidgets from NodeGraphQt.constants import NodeEnum, PortEnum from NodeGraphQt.qgraphics.node_base import NodeItem @@ -234,9 +234,9 @@ def _paint_horizontal(self, painter, option, widget): pen_color = QtGui.QColor(*self.border_color) pen_color.setAlpha(120) pen = QtGui.QPen(pen_color, 1.5) - pen.setCapStyle(QtCore.Qt.RoundCap) + pen.setCapStyle(QtCore.Qt.PenCapStyle.RoundCap) painter.setPen(pen) - painter.setBrush(QtCore.Qt.NoBrush) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) for p in self.inputs: if p.isVisible(): p_text = self.get_input_text_item(p) @@ -273,7 +273,7 @@ def _paint_horizontal(self, painter, option, widget): # draw the base color. painter.setBrush(QtGui.QColor(*self.color)) - painter.setPen(QtCore.Qt.NoPen) + painter.setPen(QtCore.Qt.PenStyle.NoPen) painter.drawEllipse(rect) # draw outline. @@ -291,7 +291,7 @@ def _paint_horizontal(self, painter, option, widget): border_color = QtGui.QColor(*self.border_color) # draw the outlines. - painter.setBrush(QtCore.Qt.NoBrush) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) painter.setPen(QtGui.QPen(border_color, border_width)) painter.drawEllipse(rect) @@ -307,7 +307,7 @@ def _paint_horizontal(self, painter, option, widget): painter.setBrush(QtGui.QColor(*NodeEnum.SELECTED_COLOR.value)) else: painter.setBrush(QtGui.QColor(0, 0, 0, 80)) - painter.setPen(QtCore.Qt.NoPen) + painter.setPen(QtCore.Qt.PenStyle.NoPen) painter.drawRoundedRect(text_rect, 8.0, 8.0) painter.restore() @@ -335,9 +335,9 @@ def _paint_vertical(self, painter, option, widget): pen_color = QtGui.QColor(*self.border_color) pen_color.setAlpha(120) pen = QtGui.QPen(pen_color, 1.5) - pen.setCapStyle(QtCore.Qt.RoundCap) + pen.setCapStyle(QtCore.Qt.PenCapStyle.RoundCap) painter.setPen(pen) - painter.setBrush(QtCore.Qt.NoBrush) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) for p in self.inputs: if p.isVisible(): pt1 = QtCore.QPointF( @@ -364,7 +364,7 @@ def _paint_vertical(self, painter, option, widget): # draw the base color. painter.setBrush(QtGui.QColor(*self.color)) - painter.setPen(QtCore.Qt.NoPen) + painter.setPen(QtCore.Qt.PenStyle.NoPen) painter.drawEllipse(rect) # draw outline. @@ -382,7 +382,7 @@ def _paint_vertical(self, painter, option, widget): border_color = QtGui.QColor(*self.border_color) # draw the outlines. - painter.setBrush(QtCore.Qt.NoBrush) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) painter.setPen(QtGui.QPen(border_color, border_width)) painter.drawEllipse(rect) diff --git a/NodeGraphQt/qgraphics/node_group.py b/NodeGraphQt/qgraphics/node_group.py index 478b71ac..19d1b8b1 100644 --- a/NodeGraphQt/qgraphics/node_group.py +++ b/NodeGraphQt/qgraphics/node_group.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtCore, QtGui, QtWidgets +from qtpy import QtCore, QtGui, QtWidgets from NodeGraphQt.constants import NodeEnum, PortEnum from NodeGraphQt.qgraphics.node_base import NodeItem @@ -19,8 +19,8 @@ def __init__(self, name='group', parent=None): def _paint_horizontal(self, painter, option, widget): painter.save() - painter.setBrush(QtCore.Qt.NoBrush) - painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) + painter.setPen(QtCore.Qt.PenStyle.NoPen) # base background. margin = 6.0 @@ -72,14 +72,14 @@ def _paint_horizontal(self, painter, option, widget): painter.setBrush(QtGui.QColor(*NodeEnum.SELECTED_COLOR.value)) else: painter.setBrush(QtGui.QColor(0, 0, 0, 80)) - painter.setPen(QtCore.Qt.NoPen) + painter.setPen(QtCore.Qt.PenStyle.NoPen) painter.drawRect(text_rect) # draw the outlines. pen = QtGui.QPen(border_color.darker(120), 0.8) - pen.setJoinStyle(QtCore.Qt.RoundJoin) - pen.setCapStyle(QtCore.Qt.RoundCap) - painter.setBrush(QtCore.Qt.NoBrush) + pen.setJoinStyle(QtCore.Qt.PenJoinStyle.RoundJoin) + pen.setCapStyle(QtCore.Qt.PenCapStyle.RoundCap) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) painter.setPen(pen) painter.drawLines([rect_1.topRight(), rect_2.topRight(), rect_1.topRight(), rect_1.bottomRight(), @@ -88,8 +88,8 @@ def _paint_horizontal(self, painter, option, widget): painter.drawLine(rect_1.bottomRight(), rect_2.bottomRight()) pen = QtGui.QPen(border_color, 0.8) - pen.setJoinStyle(QtCore.Qt.MiterJoin) - pen.setCapStyle(QtCore.Qt.RoundCap) + pen.setJoinStyle(QtCore.Qt.PenJoinStyle.MiterJoin) + pen.setCapStyle(QtCore.Qt.PenCapStyle.RoundCap) painter.setPen(pen) painter.drawRect(rect_2) @@ -97,8 +97,8 @@ def _paint_horizontal(self, painter, option, widget): def _paint_vertical(self, painter, option, widget): painter.save() - painter.setBrush(QtCore.Qt.NoBrush) - painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) + painter.setPen(QtCore.Qt.PenStyle.NoPen) # base background. margin = 6.0 @@ -146,7 +146,7 @@ def _paint_vertical(self, painter, option, widget): else: painter.setBrush(QtGui.QColor(0, 0, 0, 80)) - painter.setPen(QtCore.Qt.NoPen) + painter.setPen(QtCore.Qt.PenStyle.NoPen) for y in [rect_2.top() + padding, rect_2.bottom() - height - padding]: top_rect = QtCore.QRectF(rect.x() + padding - offset, y, rect.width() - (padding * 2), height) @@ -154,9 +154,9 @@ def _paint_vertical(self, painter, option, widget): # draw the outlines. pen = QtGui.QPen(border_color.darker(120), 0.8) - pen.setJoinStyle(QtCore.Qt.MiterJoin) - pen.setCapStyle(QtCore.Qt.RoundCap) - painter.setBrush(QtCore.Qt.NoBrush) + pen.setJoinStyle(QtCore.Qt.PenJoinStyle.MiterJoin) + pen.setCapStyle(QtCore.Qt.PenCapStyle.RoundCap) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) painter.setPen(pen) painter.drawLines([rect_1.topRight(), rect_2.topRight(), rect_1.topRight(), rect_1.bottomRight(), @@ -165,8 +165,8 @@ def _paint_vertical(self, painter, option, widget): painter.drawLine(rect_1.bottomRight(), rect_2.bottomRight()) pen = QtGui.QPen(border_color, 0.8) - pen.setJoinStyle(QtCore.Qt.MiterJoin) - pen.setCapStyle(QtCore.Qt.RoundCap) + pen.setJoinStyle(QtCore.Qt.PenJoinStyle.MiterJoin) + pen.setCapStyle(QtCore.Qt.PenCapStyle.RoundCap) painter.setPen(pen) painter.drawRect(rect_2) diff --git a/NodeGraphQt/qgraphics/node_overlay_disabled.py b/NodeGraphQt/qgraphics/node_overlay_disabled.py index cb03cd78..0fa0f6a0 100644 --- a/NodeGraphQt/qgraphics/node_overlay_disabled.py +++ b/NodeGraphQt/qgraphics/node_overlay_disabled.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtGui, QtCore, QtWidgets +from qtpy import QtGui, QtCore, QtWidgets from NodeGraphQt.constants import Z_VAL_NODE_WIDGET @@ -44,7 +44,7 @@ def paint(self, painter, option, widget): rect.height() + margin) if not self.proxy_mode: pen = QtGui.QPen(QtGui.QColor(*self.color), 8) - pen.setCapStyle(QtCore.Qt.RoundCap) + pen.setCapStyle(QtCore.Qt.PenCapStyle.RoundCap) painter.setPen(pen) painter.drawLine(dis_rect.topLeft(), dis_rect.bottomRight()) painter.drawLine(dis_rect.topRight(), dis_rect.bottomLeft()) diff --git a/NodeGraphQt/qgraphics/node_port_in.py b/NodeGraphQt/qgraphics/node_port_in.py index b5c23618..aa5981cb 100644 --- a/NodeGraphQt/qgraphics/node_port_in.py +++ b/NodeGraphQt/qgraphics/node_port_in.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtCore, QtGui, QtWidgets +from qtpy import QtCore, QtGui, QtWidgets from NodeGraphQt.constants import NodeEnum from NodeGraphQt.qgraphics.node_base import NodeItem @@ -29,8 +29,8 @@ def _paint_horizontal(self, painter, option, widget): self.auto_switch_mode() painter.save() - painter.setBrush(QtCore.Qt.NoBrush) - painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) + painter.setPen(QtCore.Qt.PenStyle.NoPen) margin = 2.0 rect = self.boundingRect() @@ -73,7 +73,7 @@ def _paint_horizontal(self, painter, option, widget): pen = QtGui.QPen(QtGui.QColor(*self.border_color), 1.2) painter.setBrush(QtGui.QColor(0, 0, 0, 50)) - pen.setJoinStyle(QtCore.Qt.MiterJoin) + pen.setJoinStyle(QtCore.Qt.PenJoinStyle.MiterJoin) painter.setPen(pen) painter.drawPolygon(poly) @@ -89,8 +89,8 @@ def _paint_vertical(self, painter, option, widget): self.auto_switch_mode() painter.save() - painter.setBrush(QtCore.Qt.NoBrush) - painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) + painter.setPen(QtCore.Qt.PenStyle.NoPen) margin = 2.0 rect = self.boundingRect() @@ -133,7 +133,7 @@ def _paint_vertical(self, painter, option, widget): pen = QtGui.QPen(QtGui.QColor(*self.border_color), 1.2) painter.setBrush(QtGui.QColor(0, 0, 0, 50)) - pen.setJoinStyle(QtCore.Qt.MiterJoin) + pen.setJoinStyle(QtCore.Qt.PenJoinStyle.MiterJoin) painter.setPen(pen) painter.drawPolygon(poly) diff --git a/NodeGraphQt/qgraphics/node_port_out.py b/NodeGraphQt/qgraphics/node_port_out.py index 733b0043..cce6d89d 100644 --- a/NodeGraphQt/qgraphics/node_port_out.py +++ b/NodeGraphQt/qgraphics/node_port_out.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtCore, QtGui, QtWidgets +from qtpy import QtCore, QtGui, QtWidgets from NodeGraphQt.constants import NodeEnum from NodeGraphQt.qgraphics.node_base import NodeItem @@ -29,8 +29,8 @@ def _paint_horizontal(self, painter, option, widget): self.auto_switch_mode() painter.save() - painter.setBrush(QtCore.Qt.NoBrush) - painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) + painter.setPen(QtCore.Qt.PenStyle.NoPen) margin = 2.0 rect = self.boundingRect() @@ -73,7 +73,7 @@ def _paint_horizontal(self, painter, option, widget): pen = QtGui.QPen(QtGui.QColor(*self.border_color), 1.2) painter.setBrush(QtGui.QColor(0, 0, 0, 50)) - pen.setJoinStyle(QtCore.Qt.MiterJoin) + pen.setJoinStyle(QtCore.Qt.PenJoinStyle.MiterJoin) painter.setPen(pen) painter.drawPolygon(poly) @@ -89,8 +89,8 @@ def _paint_vertical(self, painter, option, widget): self.auto_switch_mode() painter.save() - painter.setBrush(QtCore.Qt.NoBrush) - painter.setPen(QtCore.Qt.NoPen) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) + painter.setPen(QtCore.Qt.PenStyle.NoPen) margin = 2.0 rect = self.boundingRect() @@ -133,7 +133,7 @@ def _paint_vertical(self, painter, option, widget): pen = QtGui.QPen(QtGui.QColor(*self.border_color), 1.2) painter.setBrush(QtGui.QColor(0, 0, 0, 50)) - pen.setJoinStyle(QtCore.Qt.MiterJoin) + pen.setJoinStyle(QtCore.Qt.PenJoinStyle.MiterJoin) painter.setPen(pen) painter.drawPolygon(poly) diff --git a/NodeGraphQt/qgraphics/node_text_item.py b/NodeGraphQt/qgraphics/node_text_item.py index 4f02a242..e8840dc1 100644 --- a/NodeGraphQt/qgraphics/node_text_item.py +++ b/NodeGraphQt/qgraphics/node_text_item.py @@ -1,4 +1,4 @@ -from Qt import QtWidgets, QtCore, QtGui +from qtpy import QtWidgets, QtCore, QtGui class NodeTextItem(QtWidgets.QGraphicsTextItem): @@ -20,7 +20,7 @@ def mouseDoubleClickEvent(self, event): event (QtWidgets.QGraphicsSceneMouseEvent): mouse event. """ if not self._locked: - if event.button() == QtCore.Qt.LeftButton: + if event.button() == QtCore.Qt.MouseButton.LeftButton: self.set_editable(True) event.ignore() return @@ -33,11 +33,11 @@ def keyPressEvent(self, event): Args: event (QtGui.QKeyEvent): key event. """ - if event.key() == QtCore.Qt.Key_Return: + if event.key() == QtCore.Qt.Key.Key_Return: current_text = self.toPlainText() self.set_node_name(current_text) self.set_editable(False) - elif event.key() == QtCore.Qt.Key_Escape: + elif event.key() == QtCore.Qt.Key.Key_Escape: self.setPlainText(self.node.name) self.set_editable(False) super(NodeTextItem, self).keyPressEvent(event) @@ -65,12 +65,12 @@ def set_editable(self, value=False): return if value: self.setTextInteractionFlags( - QtCore.Qt.TextEditable | - QtCore.Qt.TextSelectableByMouse | - QtCore.Qt.TextSelectableByKeyboard + QtCore.Qt.TextInteractionFlag.TextEditable | + QtCore.Qt.TextInteractionFlag.TextSelectableByMouse | + QtCore.Qt.TextInteractionFlag.TextSelectableByKeyboard ) else: - self.setTextInteractionFlags(QtCore.Qt.NoTextInteraction) + self.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.NoTextInteraction) cursor = self.textCursor() cursor.clearSelection() self.setTextCursor(cursor) @@ -99,12 +99,12 @@ def set_locked(self, state=False): self._locked = state if self._locked: self.setFlag(QtWidgets.QGraphicsItem.ItemIsFocusable, False) - self.setCursor(QtCore.Qt.ArrowCursor) + self.setCursor(QtCore.Qt.CursorShape.ArrowCursor) self.setToolTip('') else: self.setFlag(QtWidgets.QGraphicsItem.ItemIsFocusable, True) self.setToolTip('double-click to edit node name.') - self.setCursor(QtCore.Qt.IBeamCursor) + self.setCursor(QtCore.Qt.CursorShape.IBeamCursor) @property def node(self): diff --git a/NodeGraphQt/qgraphics/pipe.py b/NodeGraphQt/qgraphics/pipe.py index 8931f992..75dd130f 100644 --- a/NodeGraphQt/qgraphics/pipe.py +++ b/NodeGraphQt/qgraphics/pipe.py @@ -1,7 +1,7 @@ #!/usr/bin/python import math -from Qt import QtCore, QtGui, QtWidgets +from qtpy import QtCore, QtGui, QtWidgets from NodeGraphQt.constants import ( LayoutDirectionEnum, @@ -15,9 +15,9 @@ from NodeGraphQt.qgraphics.port import PortItem PIPE_STYLES = { - PipeEnum.DRAW_TYPE_DEFAULT.value: QtCore.Qt.SolidLine, - PipeEnum.DRAW_TYPE_DASHED.value: QtCore.Qt.DashLine, - PipeEnum.DRAW_TYPE_DOTTED.value: QtCore.Qt.DotLine + PipeEnum.DRAW_TYPE_DEFAULT.value: QtCore.Qt.PenStyle.SolidLine, + PipeEnum.DRAW_TYPE_DASHED.value: QtCore.Qt.PenStyle.DashLine, + PipeEnum.DRAW_TYPE_DOTTED.value: QtCore.Qt.PenStyle.DotLine } @@ -49,7 +49,7 @@ def __init__(self, input_port=None, output_port=None): self._dir_pointer = QtWidgets.QGraphicsPolygonItem(self) self._dir_pointer.setPolygon(self._poly) self._dir_pointer.setFlag( - QtWidgets.QGraphicsPathItem.ItemIsSelectable, False + QtWidgets.QGraphicsPathItem.GraphicsItemFlag.ItemIsSelectable, False ) self.reset() @@ -74,7 +74,7 @@ def hoverLeaveEvent(self, event): self.highlight() def itemChange(self, change, value): - if change == QtWidgets.QGraphicsPathItem.ItemSelectedChange and self.scene(): + if change == QtWidgets.QGraphicsPathItem.GraphicsItemChange.ItemSelectedChange and self.scene(): if value: self.highlight() else: @@ -102,7 +102,7 @@ def paint(self, painter, option, widget): painter.setPen(pen) painter.setBrush(self.brush()) - painter.setRenderHint(QtGui.QPainter.Antialiasing, True) + painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing, True) painter.drawPath(self.path()) # QPaintDevice: Cannot destroy paint device that is being painted. @@ -429,14 +429,14 @@ def set_pipe_styling(self, color, width=2, style=0): pen.setWidth(width) pen.setColor(QtGui.QColor(*color)) pen.setStyle(PIPE_STYLES.get(style)) - pen.setJoinStyle(QtCore.Qt.MiterJoin) - pen.setCapStyle(QtCore.Qt.RoundCap) + pen.setJoinStyle(QtCore.Qt.PenJoinStyle.MiterJoin) + pen.setCapStyle(QtCore.Qt.PenCapStyle.RoundCap) self.setPen(pen) self.setBrush(QtGui.QBrush(QtCore.Qt.NoBrush)) pen = self._dir_pointer.pen() - pen.setJoinStyle(QtCore.Qt.MiterJoin) - pen.setCapStyle(QtCore.Qt.RoundCap) + pen.setJoinStyle(QtCore.Qt.PenJoinStyle.MiterJoin) + pen.setCapStyle(QtCore.Qt.PenCapStyle.RoundCap) pen.setWidth(width) pen.setColor(QtGui.QColor(*color)) self._dir_pointer.setPen(pen) diff --git a/NodeGraphQt/qgraphics/port.py b/NodeGraphQt/qgraphics/port.py index dbeab4d0..424b136a 100644 --- a/NodeGraphQt/qgraphics/port.py +++ b/NodeGraphQt/qgraphics/port.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtGui, QtCore, QtWidgets +from qtpy import QtGui, QtCore, QtWidgets from NodeGraphQt.constants import ( PortTypeEnum, PortEnum, @@ -16,8 +16,8 @@ def __init__(self, parent=None): super(PortItem, self).__init__(parent) self.setAcceptHoverEvents(True) self.setCacheMode(ITEM_CACHE_MODE) - self.setFlag(QtWidgets.QGraphicsItem.ItemIsSelectable, False) - self.setFlag(QtWidgets.QGraphicsItem.ItemSendsScenePositionChanges, True) + self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemIsSelectable, False) + self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag.ItemSendsScenePositionChanges, True) self.setZValue(Z_VAL_PORT) self._pipes = [] self._width = PortEnum.SIZE.value @@ -114,7 +114,7 @@ def paint(self, painter, option, widget): painter.restore() def itemChange(self, change, value): - if change == QtWidgets.QGraphicsItem.ItemScenePositionHasChanged: + if change == QtWidgets.QGraphicsItem.GraphicsItemChange.ItemScenePositionHasChanged: self.redraw_connected_pipes() return super(PortItem, self).itemChange(change, value) diff --git a/NodeGraphQt/qgraphics/slicer.py b/NodeGraphQt/qgraphics/slicer.py index 08282840..791ac132 100644 --- a/NodeGraphQt/qgraphics/slicer.py +++ b/NodeGraphQt/qgraphics/slicer.py @@ -1,7 +1,7 @@ #!/usr/bin/python import math -from Qt import QtCore, QtGui, QtWidgets +from qtpy import QtCore, QtGui, QtWidgets from NodeGraphQt.constants import Z_VAL_NODE_WIDGET, PipeSlicerEnum @@ -33,7 +33,7 @@ def paint(self, painter, option, widget): arrow_size = 4.0 painter.save() - painter.setRenderHint(painter.Antialiasing, True) + painter.setRenderHint(painter.RenderHint.Antialiasing, True) font = painter.font() font.setPointSize(12) @@ -45,20 +45,20 @@ def paint(self, painter, option, widget): text_color = QtGui.QColor(*PipeSlicerEnum.COLOR.value) text_color.setAlpha(80) painter.setPen(QtGui.QPen( - text_color, PipeSlicerEnum.WIDTH.value, QtCore.Qt.SolidLine + text_color, PipeSlicerEnum.WIDTH.value, QtCore.Qt.PenStyle.SolidLine )) painter.drawText(text_pos, text) painter.setPen(QtGui.QPen( - color, PipeSlicerEnum.WIDTH.value, QtCore.Qt.DashDotLine + color, PipeSlicerEnum.WIDTH.value, QtCore.Qt.PenStyle.DashDotLine )) painter.drawPath(self.path()) pen = QtGui.QPen( - color, PipeSlicerEnum.WIDTH.value, QtCore.Qt.SolidLine + color, PipeSlicerEnum.WIDTH.value, QtCore.Qt.PenStyle.SolidLine ) - pen.setCapStyle(QtCore.Qt.RoundCap) - pen.setJoinStyle(QtCore.Qt.MiterJoin) + pen.setCapStyle(QtCore.Qt.PenCapStyle.RoundCap) + pen.setJoinStyle(QtCore.Qt.PenJoinStyle.MiterJoin) painter.setPen(pen) painter.setBrush(color) diff --git a/NodeGraphQt/widgets/actions.py b/NodeGraphQt/widgets/actions.py index 34d07972..54f0b855 100644 --- a/NodeGraphQt/widgets/actions.py +++ b/NodeGraphQt/widgets/actions.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtCore, QtWidgets +from qtpy import QtCore, QtWidgets from NodeGraphQt.constants import ViewerEnum diff --git a/NodeGraphQt/widgets/dialogs.py b/NodeGraphQt/widgets/dialogs.py index b6e5b40c..4412f143 100644 --- a/NodeGraphQt/widgets/dialogs.py +++ b/NodeGraphQt/widgets/dialogs.py @@ -1,6 +1,6 @@ import os -from Qt import QtWidgets, QtGui, QtCore +from qtpy import QtWidgets, QtGui, QtCore _current_user_directory = os.path.expanduser('~') diff --git a/NodeGraphQt/widgets/node_graph.py b/NodeGraphQt/widgets/node_graph.py index b50117b2..66880e25 100644 --- a/NodeGraphQt/widgets/node_graph.py +++ b/NodeGraphQt/widgets/node_graph.py @@ -1,4 +1,4 @@ -from Qt import QtWidgets, QtGui +from qtpy import QtWidgets, QtGui from NodeGraphQt.constants import ( NodeEnum, ViewerEnum, ViewerNavEnum diff --git a/NodeGraphQt/widgets/node_widgets.py b/NodeGraphQt/widgets/node_widgets.py index 39bd7c8c..333df2d7 100644 --- a/NodeGraphQt/widgets/node_widgets.py +++ b/NodeGraphQt/widgets/node_widgets.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtCore, QtWidgets +from qtpy import QtCore, QtWidgets from NodeGraphQt.constants import ViewerEnum, Z_VAL_NODE_WIDGET from NodeGraphQt.errors import NodeWidgetError @@ -287,7 +287,7 @@ def set_value(self, text=''): combo_widget.addItems(text) return if text != self.get_value(): - index = combo_widget.findText(text, QtCore.Qt.MatchExactly) + index = combo_widget.findText(text, QtCore.Qt.MatchFlag.MatchExactly) combo_widget.setCurrentIndex(index) def add_item(self, item): @@ -354,7 +354,7 @@ def __init__(self, parent=None, name='', label='', text='', placeholder_text='') ledit.setText(text) ledit.setPlaceholderText(placeholder_text) ledit.setStyleSheet(stylesheet) - ledit.setAlignment(QtCore.Qt.AlignCenter) + ledit.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) ledit.editingFinished.connect(self.on_value_changed) ledit.clearFocus() self.set_custom_widget(ledit) diff --git a/NodeGraphQt/widgets/scene.py b/NodeGraphQt/widgets/scene.py index eb6fa3a5..979bbbd2 100644 --- a/NodeGraphQt/widgets/scene.py +++ b/NodeGraphQt/widgets/scene.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from Qt import QtGui, QtCore, QtWidgets +from qtpy import QtGui, QtCore, QtWidgets from NodeGraphQt.constants import ViewerEnum @@ -91,7 +91,7 @@ def drawBackground(self, painter, rect): super(NodeScene, self).drawBackground(painter, rect) painter.save() - painter.setRenderHint(QtGui.QPainter.Antialiasing, False) + painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing, False) painter.setBrush(self.backgroundBrush()) if self._grid_mode is ViewerEnum.GRID_DISPLAY_DOTS.value: @@ -122,9 +122,9 @@ def mousePressEvent(self, event): self.viewer().sceneMousePressEvent(event) super(NodeScene, self).mousePressEvent(event) keep_selection = any([ - event.button() == QtCore.Qt.MiddleButton, - event.button() == QtCore.Qt.RightButton, - event.modifiers() == QtCore.Qt.AltModifier + event.button() == QtCore.Qt.MouseButton.MiddleButton, + event.button() == QtCore.Qt.MouseButton.RightButton, + event.modifiers() == QtCore.Qt.KeyboardModifier.AltModifier ]) if keep_selection: for node in selected_nodes: diff --git a/NodeGraphQt/widgets/tab_search.py b/NodeGraphQt/widgets/tab_search.py index 477342f8..3e60a552 100644 --- a/NodeGraphQt/widgets/tab_search.py +++ b/NodeGraphQt/widgets/tab_search.py @@ -2,7 +2,7 @@ import re from collections import OrderedDict -from Qt import QtCore, QtWidgets, QtGui +from qtpy import QtCore, QtWidgets, QtGui from NodeGraphQt.constants import ViewerEnum, ViewerNavEnum @@ -15,8 +15,8 @@ class TabSearchCompleter(QtWidgets.QCompleter): def __init__(self, nodes=None, parent=None): super(TabSearchCompleter, self).__init__(nodes, parent) - self.setCompletionMode(self.PopupCompletion) - self.setCaseSensitivity(QtCore.Qt.CaseInsensitive) + self.setCompletionMode(self.CompletionMode.PopupCompletion) + self.setCaseSensitivity(QtCore.Qt.CaseSensitivity.CaseInsensitive) self._local_completion_prefix = '' self._using_orig_model = False self._source_model = None @@ -35,11 +35,14 @@ def splitPath(self, path): def updateModel(self): if not self._using_orig_model: self._filter_model.setSourceModel(self._source_model) - - pattern = QtCore.QRegExp(self._local_completion_prefix, - QtCore.Qt.CaseInsensitive, - QtCore.QRegExp.FixedString) - self._filter_model.setFilterRegExp(pattern) + # # https://doc.qt.io/qtforpython-6/overviews/qtcore-changes-qt6.html#the-qregularexpression-class + # pattern = QtCore.QRegExp(self._local_completion_prefix, + # QtCore.Qt.CaseSensitivity.CaseInsensitive, + # QtCore.QRegExp.FixedString) + # self._filter_model.setFilterRegExp(pattern) + # TODO: review these changes + self._filter_model.setFilterCaseSensitivity(QtCore.Qt.CaseSensitivity.CaseInsensitive) + self._filter_model.setFilterFixedString(self._local_completion_prefix) def setModel(self, model): self._source_model = model @@ -55,7 +58,7 @@ class TabSearchLineEditWidget(QtWidgets.QLineEdit): def __init__(self, parent=None): super(TabSearchLineEditWidget, self).__init__(parent) - self.setAttribute(QtCore.Qt.WA_MacShowFocusRect, 0) + self.setAttribute(QtCore.Qt.WidgetAttribute.WA_MacShowFocusRect, 0) self.setMinimumSize(200, 22) # text_color = self.palette().text().color().getRgb() text_color = tuple(map(lambda i, j: i - j, (255, 255, 255), @@ -88,7 +91,7 @@ def __init__(self, parent=None): def keyPressEvent(self, event): super(TabSearchLineEditWidget, self).keyPressEvent(event) - if event.key() == QtCore.Qt.Key_Tab: + if event.key() == QtCore.Qt.Key.Key_Tab: self.tab_pressed.emit() diff --git a/NodeGraphQt/widgets/viewer.py b/NodeGraphQt/widgets/viewer.py index 453538c7..db60f96d 100644 --- a/NodeGraphQt/widgets/viewer.py +++ b/NodeGraphQt/widgets/viewer.py @@ -1,9 +1,8 @@ #!/usr/bin/python # -*- coding: utf-8 -*- import math -from distutils.version import LooseVersion -from Qt import QtGui, QtCore, QtWidgets +from qtpy import QtGui, QtCore, QtWidgets from NodeGraphQt.base.menu import BaseMenu from NodeGraphQt.constants import ( @@ -57,18 +56,19 @@ def __init__(self, parent=None, undo_stack=None): """ Args: parent: - undo_stack (QtWidgets.QUndoStack): undo stack from the parent + undo_stack (QtGui.QUndoStack): undo stack from the parent graph controller. """ super(NodeViewer, self).__init__(parent) self.setScene(NodeScene(self)) - self.setRenderHint(QtGui.QPainter.Antialiasing, True) - self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - self.setViewportUpdateMode(QtWidgets.QGraphicsView.BoundingRectViewportUpdate) - self.setCacheMode(QtWidgets.QGraphicsView.CacheBackground) - self.setOptimizationFlag(QtWidgets.QGraphicsView.DontAdjustForAntialiasing) + self.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing, True) + self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setViewportUpdateMode(QtWidgets.QGraphicsView.ViewportUpdateMode.BoundingRectViewportUpdate) + self.setCacheMode(QtWidgets.QGraphicsView.CacheModeFlag.CacheBackground) + self.setOptimizationFlag( + QtWidgets.QGraphicsView.OptimizationFlag.DontAdjustForAntialiasing) self.setAcceptDrops(True) self.resize(850, 800) @@ -91,7 +91,7 @@ def __init__(self, parent=None, undo_stack=None): self._node_positions = {} self._rubber_band = QtWidgets.QRubberBand( - QtWidgets.QRubberBand.Rectangle, self + QtWidgets.QRubberBand.Shape.Rectangle, self ) self._rubber_band.isActive = False @@ -102,7 +102,7 @@ def __init__(self, parent=None, undo_stack=None): text_color.setAlpha(50) self._cursor_text = QtWidgets.QGraphicsTextItem() self._cursor_text.setFlag( - QtWidgets.QGraphicsTextItem.ItemIsSelectable, False + QtWidgets.QGraphicsTextItem.GraphicsItemFlag.ItemIsSelectable, False ) self._cursor_text.setDefaultTextColor(text_color) self._cursor_text.setZValue(Z_VAL_PIPE - 1) @@ -202,9 +202,8 @@ def _build_context_menus(self): if self._undo_action and self._redo_action: self._undo_action.setShortcuts(QtGui.QKeySequence.Undo) self._redo_action.setShortcuts(QtGui.QKeySequence.Redo) - if LooseVersion(QtCore.qVersion()) >= LooseVersion('5.10'): - self._undo_action.setShortcutVisibleInContextMenu(True) - self._redo_action.setShortcutVisibleInContextMenu(True) + self._undo_action.setShortcutVisibleInContextMenu(True) + self._redo_action.setShortcutVisibleInContextMenu(True) # undo & redo always at the top of the "node graph context menu". self._ctx_graph_menu.addAction(self._undo_action) @@ -268,7 +267,7 @@ def _update_scene(self): Redraw the scene. """ self.setSceneRect(self._scene_range) - self.fitInView(self._scene_range, QtCore.Qt.KeepAspectRatio) + self.fitInView(self._scene_range, QtCore.Qt.AspectRatioMode.KeepAspectRatio) def _combined_rect(self, nodes): """ @@ -387,11 +386,11 @@ def contextMenuEvent(self, event): return super(NodeViewer, self).contextMenuEvent(event) def mousePressEvent(self, event): - if event.button() == QtCore.Qt.LeftButton: + if event.button() == QtCore.Qt.MouseButton.LeftButton: self.LMB_state = True - elif event.button() == QtCore.Qt.RightButton: + elif event.button() == QtCore.Qt.MouseButton.RightButton: self.RMB_state = True - elif event.button() == QtCore.Qt.MiddleButton: + elif event.button() == QtCore.Qt.MouseButton.MiddleButton: self.MMB_state = True self._origin_pos = event.pos() @@ -511,11 +510,11 @@ def mousePressEvent(self, event): super(NodeViewer, self).mousePressEvent(event) def mouseReleaseEvent(self, event): - if event.button() == QtCore.Qt.LeftButton: + if event.button() == QtCore.Qt.MouseButton.LeftButton: self.LMB_state = False - elif event.button() == QtCore.Qt.RightButton: + elif event.button() == QtCore.Qt.MouseButton.RightButton: self.RMB_state = False - elif event.button() == QtCore.Qt.MiddleButton: + elif event.button() == QtCore.Qt.MouseButton.MiddleButton: self.MMB_state = False # hide pipe slicer. @@ -674,9 +673,9 @@ def wheelEvent(self, event): def dropEvent(self, event): pos = self.mapToScene(event.pos()) - event.setDropAction(QtCore.Qt.CopyAction) + event.setDropAction(QtCore.Qt.DropAction.CopyAction) self.data_dropped.emit( - event.mimeData(), QtCore.QPoint(pos.x(), pos.y()) + event.mimeData(), QtCore.QPointF(pos.x(), pos.y()) ) def dragEnterEvent(self, event): @@ -712,12 +711,12 @@ def keyPressEvent(self, event): Args: event (QtGui.QKeyEvent): key event. """ - self.ALT_state = event.modifiers() == QtCore.Qt.AltModifier - self.CTRL_state = event.modifiers() == QtCore.Qt.ControlModifier - self.SHIFT_state = event.modifiers() == QtCore.Qt.ShiftModifier + self.ALT_state = event.modifiers() == QtCore.Qt.KeyboardModifier.AltModifier + self.CTRL_state = event.modifiers() == QtCore.Qt.KeyboardModifier.ControlModifier + self.SHIFT_state = event.modifiers() == QtCore.Qt.KeyboardModifier.ShiftModifier # Todo: find a better solution to catch modifier keys. - if event.modifiers() == (QtCore.Qt.AltModifier | QtCore.Qt.ShiftModifier): + if event.modifiers() == (QtCore.Qt.KeyboardModifier.AltModifier | QtCore.Qt.KeyboardModifier.ShiftModifier): self.ALT_state = True self.SHIFT_state = True @@ -753,9 +752,9 @@ def keyReleaseEvent(self, event): Args: event (QtGui.QKeyEvent): key event. """ - self.ALT_state = event.modifiers() == QtCore.Qt.AltModifier - self.CTRL_state = event.modifiers() == QtCore.Qt.ControlModifier - self.SHIFT_state = event.modifiers() == QtCore.Qt.ShiftModifier + self.ALT_state = event.modifiers() == QtCore.Qt.KeyboardModifier.AltModifier + self.CTRL_state = event.modifiers() == QtCore.Qt.KeyboardModifier.ControlModifier + self.SHIFT_state = event.modifiers() == QtCore.Qt.KeyboardModifier.ShiftModifier super(NodeViewer, self).keyReleaseEvent(event) # hide and reset cursor text. @@ -869,7 +868,7 @@ def sceneMousePressEvent(self, event): self._node_positions[n] = n.xy_pos # emit selected node id with LMB. - if event.button() == QtCore.Qt.LeftButton: + if event.button() == QtCore.Qt.MouseButton.LeftButton: self.node_selected.emit(node.id) if not isinstance(node, BackdropNodeItem): @@ -908,7 +907,7 @@ def sceneMouseReleaseEvent(self, event): event (QtWidgets.QGraphicsSceneMouseEvent): The event handler from the QtWidgets.QGraphicsScene """ - if event.button() != QtCore.Qt.MiddleButton: + if event.button() != QtCore.Qt.MouseButton.MiddleButton: self.apply_live_connection(event) # --- port connections --- @@ -1641,9 +1640,16 @@ def use_OpenGL(self): """ # use QOpenGLWidget instead of the deprecated QGLWidget to avoid # problems with Wayland. - import Qt - if Qt.IsPySide2: - from PySide2.QtWidgets import QOpenGLWidget - elif Qt.IsPyQt5: - from PyQt5.QtWidgets import QOpenGLWidget - self.setViewport(QOpenGLWidget()) + + # TODO: Review this part and make sure we do not break anything + # import qtpy + # if qtpy.PYSIDE2: + # from PySide2.QtWidgets import QOpenGLWidget + # elif qtpy.PYQT5: + # from PyQt5.QtWidgets import QOpenGLWidget + # elif qtpy.PYSIDE6: + # from PySide6.QtOpenGLWidgets import QOpenGLWidget + # elif qtpy.PYQT6: + # from PyQt6.QtOpenGLWidgets import QOpenGLWidget + + self.setViewport(QtWidgets.QOpenGLWidget()) diff --git a/NodeGraphQt/widgets/viewer_nav.py b/NodeGraphQt/widgets/viewer_nav.py index ef809e71..23fe60c6 100644 --- a/NodeGraphQt/widgets/viewer_nav.py +++ b/NodeGraphQt/widgets/viewer_nav.py @@ -1,4 +1,4 @@ -from Qt import QtWidgets, QtCore, QtGui +from qtpy import QtWidgets, QtCore, QtGui from NodeGraphQt.constants import NodeEnum, ViewerNavEnum @@ -27,14 +27,14 @@ def paint(self, painter, option, index): ) painter.save() - painter.setPen(QtCore.Qt.NoPen) - painter.setBrush(QtCore.Qt.NoBrush) - painter.setRenderHint(QtGui.QPainter.Antialiasing, True) + painter.setPen(QtCore.Qt.PenStyle.NoPen) + painter.setBrush(QtCore.Qt.BrushStyle.NoBrush) + painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing, True) # background. bg_color = QtGui.QColor(*ViewerNavEnum.ITEM_COLOR.value) itm_color = QtGui.QColor(80, 128, 123) - if option.state & QtWidgets.QStyle.State_Selected: + if option.state & QtWidgets.QStyle.StateFlag.State_Selected: bg_color = bg_color.lighter(120) itm_color = QtGui.QColor(*NodeEnum.SELECTED_BORDER_COLOR.value) @@ -73,7 +73,7 @@ def paint(self, painter, option, index): lambda i, j: i - j, (255, 255, 255), bg_color.getRgb() ))) pen = QtGui.QPen(pen_color, 0.5) - pen.setCapStyle(QtCore.Qt.RoundCap) + pen.setCapStyle(QtCore.Qt.PenCapStyle.RoundCap) painter.setPen(pen) font = painter.font() @@ -99,10 +99,10 @@ class NodeNavigationWidget(QtWidgets.QListView): def __init__(self, parent=None): super(NodeNavigationWidget, self).__init__(parent) - self.setSelectionMode(self.SingleSelection) - self.setResizeMode(self.Adjust) - self.setViewMode(self.ListMode) - self.setFlow(self.LeftToRight) + self.setSelectionMode(self.SelectionMode.SingleSelection) + self.setResizeMode(self.ResizeMode.Adjust) + self.setViewMode(self.ViewMode.ListMode) + self.setFlow(self.Flow.LeftToRight) self.setDragEnabled(False) self.setMinimumHeight(20) self.setMaximumHeight(36) @@ -149,11 +149,11 @@ def add_label_item(self, label, node_id): else: width = metrics.width(item.text()) width *= 1.5 - item.setSizeHint(QtCore.QSize(width, 20)) + item.setSizeHint(QtCore.QSize(int(width), 20)) self.model().appendRow(item) self.selectionModel().setCurrentIndex( self.model().indexFromItem(item), - QtCore.QItemSelectionModel.ClearAndSelect) + QtCore.QItemSelectionModel.SelectionFlag.ClearAndSelect) def update_label_item(self, label, node_id): rows = reversed(range(self.model().rowCount())) diff --git a/README.md b/README.md index 7ee41d52..68e5964f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# NodeGraphQt +# NodeGraphQt (for Qt6) [![API Documentation](https://github.com/jchanvfx/NodeGraphQt/actions/workflows/sphinx_doc_build.yml/badge.svg)](https://github.com/jchanvfx/NodeGraphQt/actions/workflows/sphinx_doc_build.yml) [![PyPI Package](https://github.com/jchanvfx/NodeGraphQt/actions/workflows/pypi_publish.yml/badge.svg)](https://github.com/jchanvfx/NodeGraphQt/actions/workflows/pypi_publish.yml) @@ -11,17 +11,18 @@
-NodeGraphQt is a node graph UI framework written in `PySide2` that can be re-implemented. +[NodeGraphQt](https://github.com/jchanvfx/NodeGraphQt/releases) is a node graph UI framework for `PySide2` that can be that can be re-implemented. +**This** fork provides a few changes to support Qt 6 using either PySide6/PyQt6 thanks to the [qtpy compatability layer](https://pypi.org/project/QtPy/).