From 87d27daafb7312854a2cfc3ea01da3ea4fd5ca75 Mon Sep 17 00:00:00 2001 From: Jarrett Johnson Date: Tue, 24 Feb 2026 01:05:23 -0500 Subject: [PATCH] port over qt6 migrations Fixes #498 --- data/startup/apbs_gui/__init__.py | 4 +- data/startup/apbs_gui/qtwidgets.py | 10 ++-- data/startup/lightingsettings_gui/main.py | 4 +- modules/pmg_qt/TextEditor.py | 18 +++---- modules/pmg_qt/advanced_settings_gui.py | 10 ++-- modules/pmg_qt/builder.py | 14 ++--- modules/pmg_qt/file_dialogs.py | 2 +- modules/pmg_qt/keymapping.py | 64 +++++++++++------------ modules/pmg_qt/mimic_tk.py | 14 ++--- modules/pmg_qt/properties_dialog.py | 12 ++--- modules/pmg_qt/pymol_gl_widget.py | 14 ++--- modules/pmg_qt/pymol_qt_gui.py | 60 ++++++++++----------- modules/pmg_qt/scene_bin_gui.py | 2 +- modules/pmg_qt/shortcut_menu_gui.py | 20 +++---- modules/pmg_qt/syntax/__init__.py | 2 +- modules/pmg_qt/volume.py | 56 ++++++++++---------- modules/pymol/Qt/__init__.py | 46 ---------------- modules/pymol/Qt/utils.py | 8 +-- modules/pymol/plugins/managergui_qt.py | 22 ++++---- 19 files changed, 168 insertions(+), 214 deletions(-) diff --git a/data/startup/apbs_gui/__init__.py b/data/startup/apbs_gui/__init__.py index 5b99259e6..8b61f85cf 100644 --- a/data/startup/apbs_gui/__init__.py +++ b/data/startup/apbs_gui/__init__.py @@ -142,11 +142,11 @@ Execute the pipeline (prep, apbs, surface vis) if warnings: @form._callInMainThread def result(): - msgbox = QMessageBox(QMessageBox.Question, 'Continue?', + msgbox = QMessageBox(QMessageBox.Icon.Question, 'Continue?', method + ' emmitted warnings, do you want to continue?', QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No , form._dialog) msgbox.setDetailedText(warnings) - return msgbox.exec_() + return msgbox.exec() if result == QMessageBox.StandardButton.No: raise SilentAbort diff --git a/data/startup/apbs_gui/qtwidgets.py b/data/startup/apbs_gui/qtwidgets.py index a037c08ee..223f48f25 100644 --- a/data/startup/apbs_gui/qtwidgets.py +++ b/data/startup/apbs_gui/qtwidgets.py @@ -4,13 +4,13 @@ from pymol.Qt import QtCore, QtWidgets class ResizableMessageBox(QtWidgets.QMessageBox): _EVENT_TYPES = ( - QtCore.QEvent.UpdateRequest, - QtCore.QEvent.WinIdChange, - QtCore.QEvent.ShowToParent, + QtCore.QEvent.Type.UpdateRequest, + QtCore.QEvent.Type.WinIdChange, + QtCore.QEvent.Type.ShowToParent, ) _UNWANTED_WINDOW_FLAGS = ( - QtCore.Qt.MSWindowsFixedSizeDialogHint | + QtCore.Qt.WindowType.MSWindowsFixedSizeDialogHint | 0) def _make_resizable(self): @@ -20,7 +20,7 @@ class ResizableMessageBox(QtWidgets.QMessageBox): self.setSizeGripEnabled(True) - ex = QtWidgets.QSizePolicy.Expanding + ex = QtWidgets.QSizePolicy.Policy.Expanding for w in [self, textEdit]: w.setMaximumSize(0xffffff, 0xffffff) w.setSizePolicy(ex, ex) diff --git a/data/startup/lightingsettings_gui/main.py b/data/startup/lightingsettings_gui/main.py index e003f1c6d..72a0ced5f 100644 --- a/data/startup/lightingsettings_gui/main.py +++ b/data/startup/lightingsettings_gui/main.py @@ -13,7 +13,7 @@ Qt = QtCore.Qt class SettingSlider(QtWidgets.QSlider): def __init__(self, parent, setting, min_val, max_val, res, line_edit): - super(SettingSlider, self).__init__(Qt.Horizontal, parent) + super(SettingSlider, self).__init__(Qt.Orientation.Horizontal, parent) self.setting = setting self.min_val = float(min_val) @@ -211,7 +211,7 @@ def create_dialog(): form_layout = QtWidgets.QFormLayout() form_layout.setContentsMargins(0, 0, 0, 0) form_layout.setVerticalSpacing(0) - form_layout.setLabelAlignment(Qt.AlignLeft) + form_layout.setLabelAlignment(Qt.AlignmentFlag.AlignLeft) layout.addLayout(form_layout) for i, item in enumerate(sliders, 1): diff --git a/modules/pmg_qt/TextEditor.py b/modules/pmg_qt/TextEditor.py index b2cad7f90..57867e63b 100644 --- a/modules/pmg_qt/TextEditor.py +++ b/modules/pmg_qt/TextEditor.py @@ -94,11 +94,11 @@ class TextEditor(QtWidgets.QMainWindow): QMessageBox = QtWidgets.QMessageBox if self._get() != self._savedcontent: ok = QMessageBox.question(None, "Save?", "Save changes?", - QMessageBox.Yes | QMessageBox.No | - QMessageBox.Cancel, QMessageBox.Yes) - if ok == QMessageBox.Yes: + QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No | + QMessageBox.StandardButton.Cancel, QMessageBox.StandardButton.Yes) + if ok == QMessageBox.StandardButton.Yes: self.doSave() - elif ok == QMessageBox.Cancel: + elif ok == QMessageBox.StandardButton.Cancel: return False return True @@ -118,10 +118,10 @@ class TextEditor(QtWidgets.QMainWindow): menubar = self.root.menuBar() filemenu = menubar.addMenu("File") - filemenu.addAction("Open", self.doOpen, QtGui.QKeySequence("Ctrl+O")) - filemenu.addAction("Save", self.doSave, QtGui.QKeySequence("Ctrl+S")) - filemenu.addAction("Save as ...", self.doSaveAs, - QtGui.QKeySequence("Ctrl+Shift+S")) + filemenu.addAction("Open", QtGui.QKeySequence("Ctrl+O"), self.doOpen) + filemenu.addAction("Save", QtGui.QKeySequence("Ctrl+S"), self.doSave) + filemenu.addAction("Save as ...", QtGui.QKeySequence("Ctrl+Shift+S"), + self.doSaveAs) syntaxmenu = menubar.addMenu("Syntax") syntaxgroup = QtWidgets.QActionGroup(self) @@ -176,7 +176,7 @@ def _edit_pymolrc(app, _list=()): pymolrc, ok = QtWidgets.QInputDialog.getText( None, 'Create new pymolrc?', 'Filename of new pymolrc', - QtWidgets.QLineEdit.Normal, pymolrc) + QtWidgets.QLineEdit.EchoMode.Normal, pymolrc) if not ok: return diff --git a/modules/pmg_qt/advanced_settings_gui.py b/modules/pmg_qt/advanced_settings_gui.py index 324542bd3..ab760a887 100644 --- a/modules/pmg_qt/advanced_settings_gui.py +++ b/modules/pmg_qt/advanced_settings_gui.py @@ -11,7 +11,7 @@ class PyMOLAdvancedSettings(QtWidgets.QWidget): options and adds them to a filterable table. """ def __init__(self, parent, cmd): - QtWidgets.QWidget.__init__(self, parent, Qt.Window) + QtWidgets.QWidget.__init__(self, parent, Qt.WindowType.Window) self.setMinimumSize(400, 500) self.cmd = cmd @@ -25,7 +25,7 @@ class PyMOLAdvancedSettings(QtWidgets.QWidget): self.filter_le = QtWidgets.QLineEdit(self) layout.addWidget(self.filter_le) self.filter_le.setPlaceholderText("Filter") - self.filter_le.textChanged.connect(self.proxy_model.setFilterRegExp) + self.filter_le.textChanged.connect(self.proxy_model.setFilterRegularExpression) self.populateData() @@ -51,12 +51,12 @@ class PyMOLAdvancedSettings(QtWidgets.QWidget): value_item = QSI() name_item = QSI(name) - name_item.setFlags(Qt.ItemIsEnabled) + name_item.setFlags(Qt.ItemFlag.ItemIsEnabled) if v_type == 1: # CheckBox type value_item.setCheckable(True) value_item.setEditable(False) # Can't edit text (but toggles) if v_list[0]: - value_item.setCheckState(Qt.Checked) + value_item.setCheckState(Qt.CheckState.Checked) else: # Text type if v_type in (2, 6): # int, str value_item.setText(str(v_list[0])) @@ -93,7 +93,7 @@ class PyMOLAdvancedSettings(QtWidgets.QWidget): index = item.data() if item.isCheckable(): - checked = item.checkState() == Qt.Checked + checked = item.checkState() == Qt.CheckState.Checked self.cmd.set(index, checked, log=1, quiet=0) else: self.cmd.set(index, item.text(), log=1, quiet=0) diff --git a/modules/pmg_qt/builder.py b/modules/pmg_qt/builder.py index 7c69f47a0..918162f0a 100644 --- a/modules/pmg_qt/builder.py +++ b/modules/pmg_qt/builder.py @@ -1020,10 +1020,10 @@ class NucleicAcidProperties: def makeFragmentButton(): btn = QtWidgets.QPushButton() - btn.setAttribute(Qt.WA_LayoutUsesWidgetRect) # OS X workaround + btn.setAttribute(Qt.WidgetAttribute.WA_LayoutUsesWidgetRect) # OS X workaround btn.setSizePolicy( - QtWidgets.QSizePolicy.Minimum, - QtWidgets.QSizePolicy.MinimumExpanding) + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.MinimumExpanding) btn.setAutoDefault(False) return btn @@ -1315,8 +1315,8 @@ class _BuilderPanel(QtWidgets.QWidget): check = QMB.question(None, 'Enable for objects?', 'Building "Undo" is disabled for the following objects:\n\n' + '\n'.join(on_per_object) + '\n\n' - 'Enable "Undo" for these objects?', QMB.Yes | QMB.No) - if check == QMB.Yes: + 'Enable "Undo" for these objects?', QMB.StandardButton.Yes | QMB.StandardButton.No) + if check == QMB.StandardButton.Yes: for oname in on_per_object: self.cmd.unset('suspend_undo', oname) @@ -1527,8 +1527,8 @@ class _BuilderPanel(QtWidgets.QWidget): def clear(self): QMB = QtWidgets.QMessageBox check = QMB.question(None, "Confirm", - "Really delete everything?", QMB.Yes | QMB.No) - if check == QMB.Yes: + "Really delete everything?", QMB.StandardButton.Yes | QMB.StandardButton.No) + if check == QMB.StandardButton.Yes: self.cmd.delete("all") self.cmd.refresh_wizard() diff --git a/modules/pmg_qt/file_dialogs.py b/modules/pmg_qt/file_dialogs.py index 3b12dea82..29f44c6a1 100644 --- a/modules/pmg_qt/file_dialogs.py +++ b/modules/pmg_qt/file_dialogs.py @@ -271,7 +271,7 @@ def load_aln_dialog(parent, filename, format): if format == 'fasta' and QtWidgets.QMessageBox.question( parent, "Load as structures?", "Load sequences as extended structures instead?" - ) == QtWidgets.QMessageBox.Yes: + ) == QtWidgets.QMessageBox.StandardButton.Yes: _self.load(filename) # hook up events diff --git a/modules/pmg_qt/keymapping.py b/modules/pmg_qt/keymapping.py index 7a365cca3..57bda9625 100644 --- a/modules/pmg_qt/keymapping.py +++ b/modules/pmg_qt/keymapping.py @@ -8,36 +8,36 @@ Qt = QtCore.Qt DEBUG = False keyMap = { - Qt.Key_Escape: 27, - Qt.Key_Tab: 9, - Qt.Key_Backspace: 8, - Qt.Key_Return: 13, - Qt.Key_Enter: 13, - Qt.Key_Delete: 127, + Qt.Key.Key_Escape: 27, + Qt.Key.Key_Tab: 9, + Qt.Key.Key_Backspace: 8, + Qt.Key.Key_Return: 13, + Qt.Key.Key_Enter: 13, + Qt.Key.Key_Delete: 127, } specialMap = { - Qt.Key_Left: 100, - Qt.Key_Up: 101, - Qt.Key_Right: 102, - Qt.Key_Down: 103, - Qt.Key_PageUp: 104, - Qt.Key_PageDown: 105, - Qt.Key_Home: 106, - Qt.Key_End: 107, - Qt.Key_Insert: 108, - Qt.Key_F1: 1, - Qt.Key_F2: 2, - Qt.Key_F3: 3, - Qt.Key_F4: 4, - Qt.Key_F5: 5, - Qt.Key_F6: 6, - Qt.Key_F7: 7, - Qt.Key_F8: 8, - Qt.Key_F9: 9, - Qt.Key_F10: 10, - Qt.Key_F11: 11, - Qt.Key_F12: 12, + Qt.Key.Key_Left: 100, + Qt.Key.Key_Up: 101, + Qt.Key.Key_Right: 102, + Qt.Key.Key_Down: 103, + Qt.Key.Key_PageUp: 104, + Qt.Key.Key_PageDown: 105, + Qt.Key.Key_Home: 106, + Qt.Key.Key_End: 107, + Qt.Key.Key_Insert: 108, + Qt.Key.Key_F1: 1, + Qt.Key.Key_F2: 2, + Qt.Key.Key_F3: 3, + Qt.Key.Key_F4: 4, + Qt.Key.Key_F5: 5, + Qt.Key.Key_F6: 6, + Qt.Key.Key_F7: 7, + Qt.Key.Key_F8: 8, + Qt.Key.Key_F9: 9, + Qt.Key.Key_F10: 10, + Qt.Key.Key_F11: 11, + Qt.Key.Key_F12: 12, } @@ -47,10 +47,10 @@ def get_modifiers(ev): qtmodifiers = ev.modifiers() for mask, qtm in [ - (0x1, Qt.ShiftModifier), - (0x2, Qt.MetaModifier), # CTRL on Mac - (0x2, Qt.ControlModifier), - (0x4, Qt.AltModifier) + (0x1, Qt.KeyboardModifier.ShiftModifier), + (0x2, Qt.KeyboardModifier.MetaModifier), # CTRL on Mac + (0x2, Qt.KeyboardModifier.ControlModifier), + (0x4, Qt.KeyboardModifier.AltModifier) ]: if qtmodifiers & qtm: pymolmod |= mask @@ -115,7 +115,7 @@ def get_wheel_delta(ev): if abs(delta_y) < abs(delta_x): # Shift+Wheel emulates horizontal scrolling - if not (ev.modifiers() & Qt.ShiftModifier): + if not (ev.modifiers() & Qt.KeyboardModifier.ShiftModifier): return 0 return delta_x diff --git a/modules/pmg_qt/mimic_tk.py b/modules/pmg_qt/mimic_tk.py index cdd107e4a..6a0067e6b 100644 --- a/modules/pmg_qt/mimic_tk.py +++ b/modules/pmg_qt/mimic_tk.py @@ -15,13 +15,13 @@ class _qtMessageBox: QMB = QtWidgets.QMessageBox variants = { - 'askyesno': ('question', QMB.Yes, QMB.No), - 'askquestion': ('question', QMB.Yes, QMB.No), - 'askokcancel': ('question', QMB.Ok, QMB.Cancel), - 'askretrycancel': ('question', QMB.Retry, QMB.Cancel), - 'showinfo': ('information', QMB.Ok, QMB.NoButton), - 'showerror': ('critical', QMB.Ok, QMB.NoButton), - 'showwarning': ('warning', QMB.Ok, QMB.NoButton), + 'askyesno': ('question', QMB.StandardButton.Yes, QMB.StandardButton.No), + 'askquestion': ('question', QMB.StandardButton.Yes, QMB.StandardButton.No), + 'askokcancel': ('question', QMB.StandardButton.Ok, QMB.StandardButton.Cancel), + 'askretrycancel': ('question', QMB.StandardButton.Retry, QMB.StandardButton.Cancel), + 'showinfo': ('information', QMB.StandardButton.Ok, QMB.StandardButton.NoButton), + 'showerror': ('critical', QMB.StandardButton.Ok, QMB.StandardButton.NoButton), + 'showwarning': ('warning', QMB.StandardButton.Ok, QMB.StandardButton.NoButton), } try: diff --git a/modules/pmg_qt/properties_dialog.py b/modules/pmg_qt/properties_dialog.py index ea2e73663..9aabd7b44 100644 --- a/modules/pmg_qt/properties_dialog.py +++ b/modules/pmg_qt/properties_dialog.py @@ -52,9 +52,9 @@ class PropsDialog(QtWidgets.QWidget): def make_entry(self, parent, label): item = QtWidgets.QTreeWidgetItem(parent) item.setText(0, str(label)) - item.setFlags(QtCore.Qt.ItemIsEditable | - QtCore.Qt.ItemIsEnabled | - QtCore.Qt.ItemIsSelectable ) + item.setFlags(QtCore.Qt.ItemFlag.ItemIsEditable | + QtCore.Qt.ItemFlag.ItemIsEnabled | + QtCore.Qt.ItemFlag.ItemIsSelectable ) return item def make_cat(self, parent, label): @@ -63,7 +63,7 @@ class PropsDialog(QtWidgets.QWidget): item.setFirstColumnSpanned(True) item.setExpanded(True) item.setChildIndicatorPolicy( - QtWidgets.QTreeWidgetItem.ShowIndicator) + QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy.ShowIndicator) return item def setup_tree_widget(self): @@ -279,8 +279,8 @@ class PropsDialog(QtWidgets.QWidget): ''' Event filter for creating new shortcuts. Processes the key event before passing it on. ''' - if (event.type() == QtCore.QEvent.KeyPress and source is self.form.treeWidget): - if (event.key() == QtCore.Qt.Key_Delete): + if (event.type() == QtCore.QEvent.Type.KeyPress and source is self.form.treeWidget): + if (event.key() == QtCore.Qt.Key.Key_Delete): self.unset_caller() return 0 return super().eventFilter(source, event) diff --git a/modules/pmg_qt/pymol_gl_widget.py b/modules/pmg_qt/pymol_gl_widget.py index 408563c23..e98186f4b 100644 --- a/modules/pmg_qt/pymol_gl_widget.py +++ b/modules/pmg_qt/pymol_gl_widget.py @@ -7,7 +7,7 @@ import pymol from pymol.Qt import QtCore from pymol.Qt import QtGui from pymol.Qt import QtWidgets -Gesture = QtCore.QEvent.Gesture +Gesture = QtCore.QEvent.Type.Gesture Qt = QtCore.Qt from .keymapping import get_modifiers @@ -43,9 +43,9 @@ class PyMOLGLWidget(BaseGLWidget): # mouse button map _buttonMap = { - Qt.LeftButton: 0, - Qt.MidButton: 1, - Qt.RightButton: 2, + Qt.MouseButton.LeftButton: 0, + Qt.MouseButton.MiddleButton: 1, + Qt.MouseButton.RightButton: 2, } def __enter__(self): @@ -91,7 +91,7 @@ class PyMOLGLWidget(BaseGLWidget): if USE_QOPENGLWIDGET: super(PyMOLGLWidget, self).__init__(parent=parent) self.setFormat(f) - self.setUpdateBehavior(QtWidgets.QOpenGLWidget.PartialUpdate) + self.setUpdateBehavior(QtWidgets.QOpenGLWidget.UpdateBehavior.PartialUpdate) else: super(PyMOLGLWidget, self).__init__(f, parent=parent) @@ -108,7 +108,7 @@ class PyMOLGLWidget(BaseGLWidget): self.setMouseTracking(True) # for accepting keyboard input (command line, shortcuts) - self.setFocusPolicy(Qt.ClickFocus) + self.setFocusPolicy(Qt.FocusPolicy.ClickFocus) # for idle rendering self._timer = QtCore.QTimer() @@ -119,7 +119,7 @@ class PyMOLGLWidget(BaseGLWidget): self.setAcceptDrops(True) # pinch-zoom - self.grabGesture(Qt.PinchGesture) + self.grabGesture(Qt.GestureType.PinchGesture) def sizeHint(self): # default 640 + internal_gui, 480 + internal_feedback diff --git a/modules/pmg_qt/pymol_qt_gui.py b/modules/pmg_qt/pymol_qt_gui.py index 8280af54b..13ebd1784 100644 --- a/modules/pmg_qt/pymol_qt_gui.py +++ b/modules/pmg_qt/pymol_qt_gui.py @@ -87,8 +87,8 @@ class PyMOLQtGUI(QtWidgets.QMainWindow, pymol._gui.PyMOLDesktopGUI): def __init__(self): # noqa QtWidgets.QMainWindow.__init__(self) - self.setDockOptions(QtWidgets.QMainWindow.AllowTabbedDocks | - QtWidgets.QMainWindow.AllowNestedDocks) + self.setDockOptions(QtWidgets.QMainWindow.DockOption.AllowTabbedDocks | + QtWidgets.QMainWindow.DockOption.AllowNestedDocks) # resize Window before it is shown options = pymol.invocation.options @@ -163,7 +163,7 @@ PyMOL> color ye (will autocomplete "yellow") quickbuttonslayout = QtWidgets.QVBoxLayout() quickbuttonslayout.setSpacing(2) - extguilayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.LeftToRight) + extguilayout = QtWidgets.QBoxLayout(QtWidgets.QBoxLayout.Direction.LeftToRight) extguilayout.setContentsMargins(2, 2, 2, 2) extguilayout.addLayout(layout) extguilayout.addLayout(quickbuttonslayout) @@ -190,16 +190,16 @@ PyMOL> color ye (will autocomplete "yellow") else: dockWidget.hide() - self.addDockWidget(Qt.TopDockWidgetArea, dockWidget) + self.addDockWidget(Qt.DockWidgetArea.TopDockWidgetArea, dockWidget) # rearrange vertically if docking left or right @dockWidget.dockLocationChanged.connect def _(area): - if area == Qt.LeftDockWidgetArea or area == Qt.RightDockWidgetArea: - extguilayout.setDirection(QtWidgets.QBoxLayout.BottomToTop) + if area == Qt.DockWidgetArea.LeftDockWidgetArea or area == Qt.DockWidgetArea.RightDockWidgetArea: + extguilayout.setDirection(QtWidgets.QBoxLayout.Direction.BottomToTop) quickbuttonslayout.takeAt(quickbuttons_stretch_index) else: - extguilayout.setDirection(QtWidgets.QBoxLayout.LeftToRight) + extguilayout.setDirection(QtWidgets.QBoxLayout.Direction.LeftToRight) if quickbuttons_stretch_index >= quickbuttonslayout.count(): quickbuttonslayout.addStretch() @@ -258,7 +258,7 @@ PyMOL> color ye (will autocomplete "yellow") for name, callback in row: btn = QtWidgets.QPushButton(name) btn.setProperty("quickbutton", True) - btn.setAttribute(Qt.WA_LayoutUsesWidgetRect) # OS X workaround + btn.setAttribute(Qt.WidgetAttribute.WA_LayoutUsesWidgetRect) # OS X workaround hbox.addWidget(btn) if callback is None: @@ -274,8 +274,8 @@ PyMOL> color ye (will autocomplete "yellow") hbox = QtWidgets.QHBoxLayout() self.progressbar = QtWidgets.QProgressBar() self.progressbar.setSizePolicy( - QtWidgets.QSizePolicy.Minimum, - QtWidgets.QSizePolicy.Minimum) + QtWidgets.QSizePolicy.Policy.Minimum, + QtWidgets.QSizePolicy.Policy.Minimum) hbox.addWidget(self.progressbar) self.abortbutton = QtWidgets.QPushButton('Abort') self.abortbutton.setStyleSheet("background: #FF0000; color: #FFFFFF") @@ -420,16 +420,16 @@ PyMOL> color ye (will autocomplete "yellow") def lineeditKeyPressEventFilter(self, watched, event): key = event.key() - if key == Qt.Key_Tab: + if key == Qt.Key.Key_Tab: self.complete() - elif key == Qt.Key_Up: - if event.modifiers() & Qt.ControlModifier: + elif key == Qt.Key.Key_Up: + if event.modifiers() & Qt.KeyboardModifier.ControlModifier: self.back_search() else: self.back() - elif key == Qt.Key_Down: + elif key == Qt.Key.Key_Down: self.forward() - elif key == Qt.Key_Return or key == Qt.Key_Enter: + elif key == Qt.Key.Key_Return or key == Qt.Key.Key_Enter: # filter out "Return" instead of binding lineedit.returnPressed, # because otherwise OrthoKey would capture it as well. self.doPrompt() @@ -442,14 +442,14 @@ PyMOL> color ye (will autocomplete "yellow") Filter out event to do tab-completion instead of move focus ''' type_ = event.type() - if type_ == QtCore.QEvent.KeyRelease: - if event.key() == Qt.Key_Tab: + if type_ == QtCore.QEvent.Type.KeyRelease: + if event.key() == Qt.Key.Key_Tab: # silently skip tab release return True - elif type_ == QtCore.QEvent.KeyPress: + elif type_ == QtCore.QEvent.Type.KeyPress: if watched is self.lineedit: return self.lineeditKeyPressEventFilter(watched, event) - elif event.key() == Qt.Key_Tab: + elif event.key() == Qt.Key.Key_Tab: self.keyPressEvent(event) return True return False @@ -473,7 +473,7 @@ PyMOL> color ye (will autocomplete "yellow") ''' Full screen ''' - is_fullscreen = self.windowState() == Qt.WindowFullScreen + is_fullscreen = self.windowState() == Qt.WindowState.WindowFullScreen if toggle == -1: toggle = not is_fullscreen @@ -592,10 +592,10 @@ PyMOL> color ye (will autocomplete "yellow") (name, R, G, B)) # if new color, insert and make current row - if not form.list_colors.findItems(name, Qt.MatchExactly): + if not form.list_colors.findItems(name, Qt.MatchFlag.MatchExactly): form.list_colors.addItem(name) form.list_colors.setCurrentItem( - form.list_colors.findItems(name, Qt.MatchExactly)[0]) + form.list_colors.findItems(name, Qt.MatchFlag.MatchExactly)[0]) # hook up events form.slider_R.valueChanged.connect(lambda v: update_spinbox(form.input_R, v)) @@ -617,7 +617,7 @@ PyMOL> color ye (will autocomplete "yellow") app = plugins.get_pmgapp() if not self.builder: self.builder = BuilderPanelDocked(self, app) - self.addDockWidget(Qt.TopDockWidgetArea, self.builder) + self.addDockWidget(Qt.DockWidgetArea.TopDockWidgetArea, self.builder) self.builder.show() self.builder.raise_() @@ -1009,9 +1009,9 @@ PyMOL> color ye (will autocomplete "yellow") self.showMaximized() elif action == 6: # fit if hasattr(QtGui, 'QWindow') and self.windowHandle().visibility() in ( - QtGui.QWindow.Maximized, QtGui.QWindow.FullScreen): + QtGui.QWindow.Visibility.Maximized, QtGui.QWindow.Visibility.FullScreen): return - a = QtWidgets.QApplication.desktop().availableGeometry(self) + a = self.screen().availableGeometry() g = self.geometry() f = self.frameGeometry() w = min(f.width(), a.width()) @@ -1025,7 +1025,7 @@ PyMOL> color ye (will autocomplete "yellow") h - f.height() + g.height(), ) elif action == 7: # focus - self.setFocus(Qt.OtherFocusReason) + self.setFocus(Qt.FocusReason.OtherFocusReason) elif action == 8: # defocus self.clearFocus() @@ -1133,12 +1133,12 @@ class PyMOLApplication(QtWidgets.QApplication): # handled by Qt, we don't want that. def handle_file_open(self, ev): - if ev.type() == QtCore.QEvent.ApplicationActivate: + if ev.type() == QtCore.QEvent.Type.ApplicationActivate: self.handle_file_open = self.handle_file_open_active return False def handle_file_open_active(self, ev): - if ev.type() != QtCore.QEvent.FileOpen: + if ev.type() != QtCore.QEvent.Type.FileOpen: return False # When double clicking a file in Finder, open it in a new instance @@ -1203,13 +1203,13 @@ def execapp(): # use QT_OPENGL=desktop (auto-detection may fail on Windows) if hasattr(Qt, 'AA_UseDesktopOpenGL') and pymol.IS_WINDOWS: - QtCore.QCoreApplication.setAttribute(Qt.AA_UseDesktopOpenGL) + QtCore.QCoreApplication.setAttribute(Qt.ApplicationAttribute.AA_UseDesktopOpenGL) # enable 4K scaling on Windows and Linux if hasattr(Qt, 'AA_EnableHighDpiScaling') and not any( v in os.environ for v in ['QT_SCALE_FACTOR', 'QT_SCREEN_SCALE_FACTORS']): - QtCore.QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling) + QtCore.QCoreApplication.setAttribute(Qt.ApplicationAttribute.AA_EnableHighDpiScaling) # fix Windows taskbar icon if pymol.IS_WINDOWS: diff --git a/modules/pmg_qt/scene_bin_gui.py b/modules/pmg_qt/scene_bin_gui.py index 77b8564b3..08251dcf7 100644 --- a/modules/pmg_qt/scene_bin_gui.py +++ b/modules/pmg_qt/scene_bin_gui.py @@ -79,7 +79,7 @@ class ScenePanel(QtWidgets.QWidget): self.sceneTableWidget.selectionModel().selectionChanged.connect( self._selection_changed) self.sceneTableWidget.setSelectionBehavior( - QtWidgets.QAbstractItemView.SelectRows) + QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows) self.sceneTableWidget.verticalHeader().setSectionsMovable(True) # Lower Buttom Elements diff --git a/modules/pmg_qt/shortcut_menu_gui.py b/modules/pmg_qt/shortcut_menu_gui.py index 041c084e9..2ff290eb9 100644 --- a/modules/pmg_qt/shortcut_menu_gui.py +++ b/modules/pmg_qt/shortcut_menu_gui.py @@ -23,10 +23,10 @@ def get_shortcut_key_map(): _SHORTCUT_KEY_MAP = get_shortcut_key_map() _SHORTCUT_MODIFIER_MAP = { - Qt.ControlModifier: _SHORTCUT_KEY_MAP[Qt.Key_Control], - Qt.AltModifier: _SHORTCUT_KEY_MAP[Qt.Key_Alt], - Qt.ShiftModifier: _SHORTCUT_KEY_MAP[Qt.Key_Shift], - Qt.MetaModifier: _SHORTCUT_KEY_MAP[Qt.Key_Meta], + Qt.KeyboardModifier.ControlModifier: _SHORTCUT_KEY_MAP[Qt.Key.Key_Control], + Qt.KeyboardModifier.AltModifier: _SHORTCUT_KEY_MAP[Qt.Key.Key_Alt], + Qt.KeyboardModifier.ShiftModifier: _SHORTCUT_KEY_MAP[Qt.Key.Key_Shift], + Qt.KeyboardModifier.MetaModifier: _SHORTCUT_KEY_MAP[Qt.Key.Key_Meta], } _REPLACE_KEYS = { @@ -48,7 +48,7 @@ class PyMOLShortcutMenu(QtWidgets.QWidget): ''' def __init__(self, parent, saved_shortcuts, cmd): - QtWidgets.QWidget.__init__(self, parent, Qt.Window) + QtWidgets.QWidget.__init__(self, parent, Qt.WindowType.Window) self.resize(700, 700) self.cmd = cmd self.shortcut_manager = ShortcutManager(saved_shortcuts, cmd) @@ -66,7 +66,7 @@ class PyMOLShortcutMenu(QtWidgets.QWidget): self.model = QtGui.QStandardItemModel(self) self.proxy_model = QtCoreModels.QSortFilterProxyModel(self) self.proxy_model.setSourceModel(self.model) - self.proxy_model.setFilterCaseSensitivity(Qt.CaseInsensitive) + self.proxy_model.setFilterCaseSensitivity(Qt.CaseSensitivity.CaseInsensitive) self.proxy_model.setFilterKeyColumn(-1) self.setWindowTitle('Keyboard Shortcut Menu') @@ -81,7 +81,7 @@ class PyMOLShortcutMenu(QtWidgets.QWidget): self.filter_le = QtWidgets.QLineEdit(self) top_layout.addWidget(self.filter_le) self.filter_le.setPlaceholderText("Filter") - self.filter_le.textChanged.connect(self.proxy_model.setFilterRegExp) + self.filter_le.textChanged.connect(self.proxy_model.setFilterRegularExpression) self.refresh_button = QtWidgets.QPushButton(self) self.refresh_button.resize(26, 26) @@ -166,8 +166,8 @@ class PyMOLShortcutMenu(QtWidgets.QWidget): key_item = QSI(key) command_item = QSI() descript_item = QSI() - key_item.setFlags(Qt.ItemIsEnabled) - descript_item.setFlags(Qt.ItemIsEditable) + key_item.setFlags(Qt.ItemFlag.ItemIsEnabled) + descript_item.setFlags(Qt.ItemFlag.ItemIsEditable) if shortcut_list[ShortcutIndex.USER_DEF]: if shortcut_list[ShortcutIndex.USER_DEF] != "Deleted": @@ -286,7 +286,7 @@ class PyMOLShortcutMenu(QtWidgets.QWidget): ''' Event filter for creating new shortcuts. Processes the key event before passing it on. ''' - if (event.type() == QtCore.QEvent.KeyPress and source is self.create_new_form.keyEdit): + if (event.type() == QtCore.QEvent.Type.KeyPress and source is self.create_new_form.keyEdit): raw_string = self.keyevent_to_string(event) processed_string = self.process_keyevent_string(raw_string) diff --git a/modules/pmg_qt/syntax/__init__.py b/modules/pmg_qt/syntax/__init__.py index c2b90a85c..b08df7227 100644 --- a/modules/pmg_qt/syntax/__init__.py +++ b/modules/pmg_qt/syntax/__init__.py @@ -7,7 +7,7 @@ def textformat(color, style=''): for word in style.split(): if word == 'bold': - fmt.setFontWeight(QtGui.QFont.Bold) + fmt.setFontWeight(QtGui.QFont.Weight.Bold) elif word == 'italic': fmt.setFontItalic(True) elif word.startswith('bg:'): diff --git a/modules/pmg_qt/volume.py b/modules/pmg_qt/volume.py index 031a038d2..396cff1c4 100644 --- a/modules/pmg_qt/volume.py +++ b/modules/pmg_qt/volume.py @@ -109,7 +109,7 @@ class VolumeEditorWidget(QtWidgets.QWidget): painter.drawLine(x0, y0, x0, y1) h = rect.height() num_lines = 10 - pen.setStyle(Qt.DashLine) + pen.setStyle(Qt.PenStyle.DashLine) painter.setPen(pen) for line in range(1, num_lines): y = y0 + h * (1.0 - self.alphaToY(line / float(num_lines))) @@ -117,8 +117,8 @@ class VolumeEditorWidget(QtWidgets.QWidget): painter.drawLine(x0, y, x1, y) def paintColorDots(self, painter, rect): - pen = QtGui.QPen(Qt.gray) - pen.setStyle(Qt.SolidLine) + pen = QtGui.QPen(Qt.GlobalColor.gray) + pen.setStyle(Qt.PenStyle.SolidLine) painter.setPen(pen) scaled_pts = [] h = rect.height() @@ -171,8 +171,8 @@ class VolumeEditorWidget(QtWidgets.QWidget): else: painter_path.lineTo(x, y) - pen = QtGui.QPen(Qt.red) - pen.setStyle(Qt.SolidLine) + pen = QtGui.QPen(Qt.GlobalColor.red) + pen.setStyle(Qt.PenStyle.SolidLine) painter.setPen(pen) painter.drawPath(painter_path) @@ -192,7 +192,7 @@ class VolumeEditorWidget(QtWidgets.QWidget): else: rect = QtCore.QRect(x, y - sh, sw + 4, sh + 2) painter.fillRect(rect, - QtGui.QColor(96, 96, 128) if self.line_color == Qt.lightGray else + QtGui.QColor(96, 96, 128) if self.line_color == Qt.GlobalColor.lightGray else QtGui.QColor(0xFF, 0xFF, 0xFF)) painter.drawRect(rect) painter.drawText(rect.x() + 2, y - 2, s) @@ -202,7 +202,7 @@ class VolumeEditorWidget(QtWidgets.QWidget): low = int(math.ceil(self.vmin)) hi = int(math.floor(self.vmax)) + 1 pen = painter.pen() - pen.setStyle(Qt.SolidLine) + pen.setStyle(Qt.PenStyle.SolidLine) pen.setColor(self.line_color) painter.setPen(pen) fm = QtGui.QFontMetrics(painter.font()) @@ -265,10 +265,10 @@ class VolumeEditorWidget(QtWidgets.QWidget): # tweak color depening on the panel floating state # disabled: always use default style is_floating = True # self.parent().parent().isFloating() - self.line_color = Qt.darkGray if is_floating else Qt.lightGray + self.line_color = Qt.GlobalColor.darkGray if is_floating else Qt.GlobalColor.lightGray painter.begin(self) - painter.setRenderHint(QtGui.QPainter.Antialiasing) + painter.setRenderHint(QtGui.QPainter.RenderHint.Antialiasing) self.paintGrid(painter, self.paint_rect) self.paintAxes(painter, self.paint_rect) painter.setClipRect(self.paint_rect) @@ -291,7 +291,7 @@ class VolumeEditorWidget(QtWidgets.QWidget): def mousePressEvent(self, event): # process textbox clicks - if event.button() == Qt.LeftButton: + if event.button() == Qt.MouseButton.LeftButton: for key, rect in self.text_boxes.items(): if rect.contains(event.pos()): if key == "amax": @@ -316,24 +316,24 @@ class VolumeEditorWidget(QtWidgets.QWidget): self.init_pos = event.pos() self.zoom_pos = None self.constraint = None - if self.point < 0 and event.button() == Qt.LeftButton: + if self.point < 0 and event.button() == Qt.MouseButton.LeftButton: self.addPoint( - event.pos(), event.modifiers() == Qt.ControlModifier) + event.pos(), event.modifiers() == Qt.KeyboardModifier.ControlModifier) # suppress color picker self.dragged = True def mouseReleaseEvent(self, event): if not self.dragged and self.point >= 0: - if event.button() == Qt.RightButton: + if event.button() == Qt.MouseButton.RightButton: x, y, r, g, b = self.points[self.point] # in 2.0: help says NoModifier, implemented is ControlModifier - if event.modifiers() in (Qt.ControlModifier, Qt.NoModifier): + if event.modifiers() in (Qt.KeyboardModifier.ControlModifier, Qt.KeyboardModifier.NoModifier): value = self.points[self.point][0] prev_x = self.points[self.point-1][0] if self.point > 0 else self.vmin next_x = self.points[self.point+1][0] if self.point < len(self.points)-1 else self.vmax x = self.enterValue("Data value", value, prev_x, next_x) - elif event.modifiers() == Qt.ShiftModifier: + elif event.modifiers() == Qt.KeyboardModifier.ShiftModifier: value = self.points[self.point][1] y = self.enterValue("Alpha value (opacity)", value, 0.0, 1.0) @@ -341,14 +341,14 @@ class VolumeEditorWidget(QtWidgets.QWidget): self.repaint() if self.real_time: self.updateVolumeColors() - if (event.button() == Qt.MidButton or - (event.button() == Qt.LeftButton and - event.modifiers() & Qt.ShiftModifier)): + if (event.button() == Qt.MouseButton.MiddleButton or + (event.button() == Qt.MouseButton.LeftButton and + event.modifiers() & Qt.KeyboardModifier.ShiftModifier)): self.removePoints( - event.modifiers() & Qt.ControlModifier) - elif event.button() == Qt.LeftButton: + event.modifiers() & Qt.KeyboardModifier.ControlModifier) + elif event.button() == Qt.MouseButton.LeftButton: self.setPointColor(self.point, - event.modifiers() == Qt.ControlModifier) + event.modifiers() == Qt.KeyboardModifier.ControlModifier) self.point = -1 self.hover_point = -1 @@ -396,7 +396,7 @@ class VolumeEditorWidget(QtWidgets.QWidget): """ This is called when color dialog is closed. """ - if result == QtWidgets.QDialog.Accepted: + if result == QtWidgets.QDialog.DialogCode.Accepted: color = self.color_dialog.currentColor() else: color = self.original_color @@ -491,16 +491,16 @@ class VolumeEditorWidget(QtWidgets.QWidget): self.ignore_set_colors = False def mouseMoveEvent(self, event): - if event.buttons() in (Qt.LeftButton, Qt.RightButton): - if (event.buttons() == Qt.RightButton and - event.modifiers() == Qt.ControlModifier): + if event.buttons() in (Qt.MouseButton.LeftButton, Qt.MouseButton.RightButton): + if (event.buttons() == Qt.MouseButton.RightButton and + event.modifiers() == Qt.KeyboardModifier.ControlModifier): # zoom in self.zoom_pos = event.pos() self.repaint() elif self.point >= 0: self.dragged = True if event.buttons( - ) & Qt.RightButton and not self.constraint: + ) & Qt.MouseButton.RightButton and not self.constraint: # constrained movement dpos = event.pos() - self.init_pos self.constraint = 'x' if ( @@ -558,7 +558,7 @@ class VolumeEditorWidget(QtWidgets.QWidget): Moves selected point(s). """ # delta == 2 if moving three points - delta = 2 if event.modifiers() == Qt.ControlModifier else 1 + delta = 2 if event.modifiers() == Qt.KeyboardModifier.ControlModifier else 1 num_points = len(self.points) x, y, r, g, b = self.points[self.point] @@ -813,7 +813,7 @@ def VolumePanelDocked(parent, *args, **kwargs): window = QtWidgets.QDockWidget(parent) _VolumePanel(widget, window, *args, **kwargs) window.setWidget(widget) - parent.addDockWidget(Qt.BottomDockWidgetArea, window) + parent.addDockWidget(Qt.DockWidgetArea.BottomDockWidgetArea, window) # disabled: always use default style # window.topLevelChanged.connect(widget.editor.windowTopLevelChanged) diff --git a/modules/pymol/Qt/__init__.py b/modules/pymol/Qt/__init__.py index 96fdfcd03..2235dde81 100644 --- a/modules/pymol/Qt/__init__.py +++ b/modules/pymol/Qt/__init__.py @@ -13,15 +13,6 @@ DEBUG = False PYQT_NAME = None QtWidgets = None -try: - from pymol._Qt_pre import * -except ImportError: - if DEBUG: - print('import _Qt_pre failed') - -PYQT_NAME = None -QtWidgets = None - try: from pymol._Qt_pre import * except ImportError: @@ -85,43 +76,6 @@ if PYQT_NAME.endswith('6'): QtWidgets.QActionGroup = QtGui.QActionGroup QtWidgets.QAction = QtGui.QAction QtWidgets.QShortcut = QtGui.QShortcut - QtCore.QSortFilterProxyModel.setFilterRegExp = QtCore.QSortFilterProxyModel.setFilterRegularExpression - QtGui.QFont.Monospace = QtGui.QFont.StyleHint.Monospace - - def copy_attributes(target_class, source_class): - for attr in dir(source_class): - if not attr.startswith('_'): - setattr(target_class, attr, getattr(source_class, attr)) - - copy_attributes(QtCore.QEvent, QtCore.QEvent.Type) - copy_attributes(QtCore.Qt, QtCore.Qt.AlignmentFlag) - copy_attributes(QtCore.Qt, QtCore.Qt.CaseSensitivity) - copy_attributes(QtCore.Qt, QtCore.Qt.CheckState) - copy_attributes(QtCore.Qt, QtCore.Qt.ContextMenuPolicy) - copy_attributes(QtCore.Qt, QtCore.Qt.DockWidgetArea) - copy_attributes(QtCore.Qt, QtCore.Qt.FocusPolicy) - copy_attributes(QtCore.Qt, QtCore.Qt.GestureType) - copy_attributes(QtCore.Qt, QtCore.Qt.ItemFlag) - copy_attributes(QtCore.Qt, QtCore.Qt.Key) - copy_attributes(QtCore.Qt, QtCore.Qt.KeyboardModifier) - copy_attributes(QtCore.Qt, QtCore.Qt.MouseButton) - copy_attributes(QtCore.Qt, QtCore.Qt.Orientation) - copy_attributes(QtCore.Qt, QtCore.Qt.WindowType) - copy_attributes(QtGui.QFont, QtGui.QFont.StyleHint) - copy_attributes(QtWidgets.QAbstractItemView, QtWidgets.QAbstractItemView.ScrollHint) - copy_attributes(QtWidgets.QAbstractItemView, QtWidgets.QAbstractItemView.SelectionBehavior) - copy_attributes(QtWidgets.QAbstractItemView, QtWidgets.QAbstractItemView.SelectionMode) - copy_attributes(QtWidgets.QBoxLayout, QtWidgets.QBoxLayout.Direction) - copy_attributes(QtWidgets.QMainWindow, QtWidgets.QMainWindow.DockOption) - copy_attributes(QtWidgets.QOpenGLWidget, QtOpenGLWidgets.QOpenGLWidget.UpdateBehavior) - copy_attributes(QtWidgets.QSizePolicy, QtWidgets.QSizePolicy.Policy) - copy_attributes(QtWidgets.QFrame, QtWidgets.QFrame.Shadow) - copy_attributes(QtWidgets.QFrame, QtWidgets.QFrame.Shape) - copy_attributes(QtWidgets.QTreeWidgetItem, QtWidgets.QTreeWidgetItem.ChildIndicatorPolicy) - - QtCore.Qt.MidButton = QtCore.Qt.MiddleButton - QtCore.Qt.WA_LayoutUsesWidgetRect = QtCore.Qt.WidgetAttribute.WA_LayoutUsesWidgetRect - if PYQT_NAME[:4] == 'PyQt': QtCore.Signal = QtCore.pyqtSignal diff --git a/modules/pymol/Qt/utils.py b/modules/pymol/Qt/utils.py index 390da9542..a9ae24c3a 100644 --- a/modules/pymol/Qt/utils.py +++ b/modules/pymol/Qt/utils.py @@ -208,7 +208,7 @@ def connectFontContextMenu(widget): @type widget: QWidget """ - widget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) + widget.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.CustomContextMenu) @widget.customContextMenuRequested.connect def _(pt): @@ -219,7 +219,7 @@ def connectFontContextMenu(widget): @action.triggered.connect def _(): font, ok = QtWidgets.QFontDialog.getFont(widget.font(), widget, - "Select Font", QtWidgets.QFontDialog.DontUseNativeDialog) + "Select Font", QtWidgets.QFontDialog.FontDialogOption.DontUseNativeDialog) if ok: widget.setFont(font) @@ -261,7 +261,7 @@ def getMonospaceFont(size=9): family = 'Monospace' font = QtGui.QFont(family, size) - font.setStyleHint(font.Monospace) + font.setStyleHint(QtGui.QFont.StyleHint.Monospace) return font @@ -353,7 +353,7 @@ class PopupOnException: parent = QtWidgets.QApplication.focusWidget() msg = str(e) or 'unknown error' - msgbox = QMB(QMB.Critical, 'Error', msg, QMB.Close, parent) + msgbox = QMB(QMB.Icon.Critical, 'Error', msg, QMB.StandardButton.Close, parent) msgbox.setDetailedText(''.join(traceback.format_tb(tb))) msgbox.exec() diff --git a/modules/pymol/plugins/managergui_qt.py b/modules/pymol/plugins/managergui_qt.py index 112650da5..78281fb2b 100644 --- a/modules/pymol/plugins/managergui_qt.py +++ b/modules/pymol/plugins/managergui_qt.py @@ -21,7 +21,7 @@ def confirm_network_access(): return True if QtWidgets.QMessageBox.question(None, 'Confirm', 'PyMOL will now download executable code from the internet!' - ' Proceed?') == QtWidgets.QMessageBox.Yes: + ' Proceed?') == QtWidgets.QMessageBox.StandardButton.Yes: self.ok = 1 else: self.ok = 0 @@ -57,7 +57,7 @@ class PluginManager(QtCore.QObject): self.form.b_remove_repo.pressed.connect(self.remove_repository) self.reload_plugins() self.form.l_repo_plugins.setSelectionMode( - QtWidgets.QAbstractItemView.ExtendedSelection) + QtWidgets.QAbstractItemView.SelectionMode.ExtendedSelection) self.form.b_install.pressed.connect(self.install_repo_plugins) self.form.b_info.pressed.connect(self.info_repo_plugin) self.populate_repositories() @@ -98,15 +98,15 @@ class PluginManager(QtCore.QObject): for row, key in enumerate(self.t_preferences_keys): item = QtWidgets.QTableWidgetItem(key) - item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) + item.setFlags(Qt.ItemFlag.ItemIsSelectable | Qt.ItemFlag.ItemIsEnabled) w.setItem(row, 0, item) item = QtWidgets.QTableWidgetItem() value = preferences[key] if isinstance(value, bool): - item.setCheckState(Qt.Checked if value else Qt.Unchecked) + item.setCheckState(Qt.CheckState.Checked if value else Qt.CheckState.Unchecked) else: - item.setFlags(item.flags() & ~Qt.ItemIsUserCheckable) + item.setFlags(item.flags() & ~Qt.ItemFlag.ItemIsUserCheckable) item.setText(str(value)) w.setItem(row, 1, item) @@ -116,8 +116,8 @@ class PluginManager(QtCore.QObject): from . import pref_get, pref_set key = self.t_preferences_keys[item.row()] - if item.flags() & Qt.ItemIsUserCheckable: - value = item.checkState() == Qt.Checked + if item.flags() & Qt.ItemFlag.ItemIsUserCheckable: + value = item.checkState() == Qt.CheckState.Checked else: value = item.data(0) @@ -225,8 +225,8 @@ class PluginManager(QtCore.QObject): def add_plugin_item(info): item = window.load_form('pluginitem', QtWidgets.QFrame()) item._widget = item._dialog - item._widget.setFrameStyle(QtWidgets.QFrame.Sunken) - item._widget.setFrameShape(QtWidgets.QFrame.Panel) + item._widget.setFrameStyle(QtWidgets.QFrame.Shadow.Sunken) + item._widget.setFrameShape(QtWidgets.QFrame.Shape.Panel) item.w_title.setText(info.name) item.w_version.setText(info.get_version()) @@ -351,11 +351,11 @@ class PluginManager(QtCore.QObject): table.insertRow(table.rowCount()) table_item = QtWidgets.QTableWidgetItem(label) table_item.setFlags(table_item.flags() & - ~(Qt.ItemIsEditable)) + ~(Qt.ItemFlag.ItemIsEditable)) table.setItem(row, 0, table_item) table_item = QtWidgets.QTableWidgetItem(text) table_item.setFlags(table_item.flags() & - ~(Qt.ItemIsEditable)) + ~(Qt.ItemFlag.ItemIsEditable)) table.setItem(row, 1, table_item) add_line('Name', info.name)