From 475bb7405f18c7b40ac53587b887976e012a0075 Mon Sep 17 00:00:00 2001 From: ludw <> Date: Wed, 23 Mar 2022 18:27:16 +0100 Subject: [PATCH] Added suport for PySide6 --- README.md | 2 +- qtwidgets/color_duo/color_duo.py | 8 ++++-- qtwidgets/color_duo/demo_pyside6.py | 26 +++++++++++++++++ qtwidgets/colorbutton/colorbutton.py | 7 +++-- qtwidgets/colorbutton/demo_pyside6.py | 26 +++++++++++++++++ qtwidgets/equalizer/demo_pyside6.py | 26 +++++++++++++++++ qtwidgets/equalizer_bar/demo_pyside6.py | 36 ++++++++++++++++++++++++ qtwidgets/equalizer_bar/equalizer_bar.py | 7 ++++- qtwidgets/filebrowser/demo_pyside6.py | 26 +++++++++++++++++ qtwidgets/gradient/demo_pyside6.py | 23 +++++++++++++++ qtwidgets/gradient/gradient.py | 8 ++++-- qtwidgets/paint/demo_pyside6.py | 24 ++++++++++++++++ qtwidgets/paint/paint.py | 5 +++- qtwidgets/palette/demo_pyside6.py | 26 +++++++++++++++++ qtwidgets/palette/palette.py | 9 ++++-- qtwidgets/passwordedit/demo_pyside6.py | 22 +++++++++++++++ qtwidgets/passwordedit/password.py | 7 ++++- qtwidgets/power_bar/demo_pyside6.py | 15 ++++++++++ qtwidgets/power_bar/power_bar.py | 8 ++++-- qtwidgets/scrubber/demo_pyside6.py | 26 +++++++++++++++++ qtwidgets/stopwatch/demo_pyside6.py | 33 ++++++++++++++++++++++ qtwidgets/toggle/demo_pyside6.py | 32 +++++++++++++++++++++ qtwidgets/toggle/toggle.py | 11 ++++++-- setup.py | 2 +- 24 files changed, 397 insertions(+), 18 deletions(-) create mode 100644 qtwidgets/color_duo/demo_pyside6.py create mode 100644 qtwidgets/colorbutton/demo_pyside6.py create mode 100644 qtwidgets/equalizer/demo_pyside6.py create mode 100644 qtwidgets/equalizer_bar/demo_pyside6.py create mode 100644 qtwidgets/filebrowser/demo_pyside6.py create mode 100644 qtwidgets/gradient/demo_pyside6.py create mode 100644 qtwidgets/paint/demo_pyside6.py create mode 100644 qtwidgets/palette/demo_pyside6.py create mode 100644 qtwidgets/passwordedit/demo_pyside6.py create mode 100644 qtwidgets/power_bar/demo_pyside6.py create mode 100644 qtwidgets/scrubber/demo_pyside6.py create mode 100644 qtwidgets/stopwatch/demo_pyside6.py create mode 100644 qtwidgets/toggle/demo_pyside6.py diff --git a/README.md b/README.md index 6befbcb..c0fe593 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Qt5 comes with a huge number of widgets built-in, from simple text boxes to digital displays, vector graphics canvas and a full-blown web browser. While you can build perfectly functional applications with the built-in widgets, sometimes your applications will need a *more*. -This repo contains a library of [custom Python Qt5 widgets](https://www.learnpyqt.com/widgets/) which are free to use in your own applications. Widgets are compatible with both PyQt5 and PySide2 (Qt for Python). Currently the repository includes - +This repo contains a library of [custom Python Qt5 widgets](https://www.learnpyqt.com/widgets/) which are free to use in your own applications. Widgets are compatible with both PyQt5 and PySide2 (Qt for Python) and PySide6. Currently the repository includes - | Widgets | Library | | :---: | :---: | diff --git a/qtwidgets/color_duo/color_duo.py b/qtwidgets/color_duo/color_duo.py index 36a3ee4..32f6ee8 100644 --- a/qtwidgets/color_duo/color_duo.py +++ b/qtwidgets/color_duo/color_duo.py @@ -2,11 +2,15 @@ if 'PyQt5' in sys.modules: from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtCore import Qt, pyqtSignal as Signal - -else: + +elif 'PySide2' in sys.modules: from PySide2 import QtCore, QtGui, QtWidgets from PySide2.QtCore import Qt, Signal +else: + from PySide6 import QtCore, QtGui, QtWidgets + from PySide6.QtCore import Qt, Signal + class ColorDuo(QtWidgets.QPushButton): ''' diff --git a/qtwidgets/color_duo/demo_pyside6.py b/qtwidgets/color_duo/demo_pyside6.py new file mode 100644 index 0000000..517ef03 --- /dev/null +++ b/qtwidgets/color_duo/demo_pyside6.py @@ -0,0 +1,26 @@ +from PySide6 import QtWidgets +from qtwidgets import ColorButton + + +class Window(QtWidgets.QMainWindow): + + def __init__(self): + super().__init__() + + palette = ColorButton() + palette.colorChanged.connect(self.show_selected_color) + self.setCentralWidget(palette) + + def show_selected_color(self, c): + print("Selected: {}".format(c)) + + +app = QtWidgets.QApplication([]) +w = Window() +w.show() +app.exec_() + + + + + diff --git a/qtwidgets/colorbutton/colorbutton.py b/qtwidgets/colorbutton/colorbutton.py index e3699db..e677094 100644 --- a/qtwidgets/colorbutton/colorbutton.py +++ b/qtwidgets/colorbutton/colorbutton.py @@ -3,10 +3,13 @@ from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtCore import Qt, pyqtSignal as Signal -else: +elif 'PySide2' in sys.modules: from PySide2 import QtCore, QtGui, QtWidgets from PySide2.QtCore import Qt, Signal - + +else: + from PySide6 import QtCore, QtGui, QtWidgets + from PySide6.QtCore import Qt, Signal class ColorButton(QtWidgets.QPushButton): diff --git a/qtwidgets/colorbutton/demo_pyside6.py b/qtwidgets/colorbutton/demo_pyside6.py new file mode 100644 index 0000000..93b05d2 --- /dev/null +++ b/qtwidgets/colorbutton/demo_pyside6.py @@ -0,0 +1,26 @@ +from PySide6 import QtWidgets +from qtwidgets import ColorButton + + +class Window(QtWidgets.QMainWindow): + + def __init__(self): + super().__init__() + + palette = ColorButton(color='red') + palette.colorChanged.connect(self.show_selected_color) + self.setCentralWidget(palette) + + def show_selected_color(self, c): + print("Selected: {}".format(c)) + + +app = QtWidgets.QApplication([]) +w = Window() +w.show() +app.exec_() + + + + + diff --git a/qtwidgets/equalizer/demo_pyside6.py b/qtwidgets/equalizer/demo_pyside6.py new file mode 100644 index 0000000..fc54da2 --- /dev/null +++ b/qtwidgets/equalizer/demo_pyside6.py @@ -0,0 +1,26 @@ +from PySide6 import QtCore, QtGui, QtWidgets +from equalizer import Equalizer + + +class Window(QtWidgets.QMainWindow): + + def __init__(self): + super().__init__() + + palette = Palette('paired12') + palette.selected.connect(self.show_selected_color) + self.setCentralWidget(palette) + + def show_selected_color(self, c): + print("Selected: {}".format(c)) + + +app = QtWidgets.QApplication([]) +w = Window() +w.show() +app.exec_() + + + + + diff --git a/qtwidgets/equalizer_bar/demo_pyside6.py b/qtwidgets/equalizer_bar/demo_pyside6.py new file mode 100644 index 0000000..17153b9 --- /dev/null +++ b/qtwidgets/equalizer_bar/demo_pyside6.py @@ -0,0 +1,36 @@ +from PySide6 import QtCore, QtWidgets +from qtwidgets import EqualizerBar + +import random + + +class Window(QtWidgets.QMainWindow): + + def __init__(self): + super().__init__() + + self.equalizer = EqualizerBar(5, ['#0C0786', '#40039C', '#6A00A7', '#8F0DA3', '#B02A8F', '#CA4678', '#E06461', + '#F1824C', '#FCA635', '#FCCC25', '#EFF821']) + self.setCentralWidget(self.equalizer) + + self._timer = QtCore.QTimer() + self._timer.setInterval(100) + self._timer.timeout.connect(self.update_values) + self._timer.start() + + def update_values(self): + self.equalizer.setValues([ + min(100, v+random.randint(0, 50) if random.randint(0, 5) > 2 else v) + for v in self.equalizer.values() + ]) + + +app = QtWidgets.QApplication([]) +w = Window() +w.show() +app.exec_() + + + + + diff --git a/qtwidgets/equalizer_bar/equalizer_bar.py b/qtwidgets/equalizer_bar/equalizer_bar.py index d1a1f72..24ddb26 100644 --- a/qtwidgets/equalizer_bar/equalizer_bar.py +++ b/qtwidgets/equalizer_bar/equalizer_bar.py @@ -4,10 +4,15 @@ from PyQt5.QtCore import Qt from PyQt5.QtCore import pyqtSignal as Signal -else: +elif 'PySide2' in sys.modules: from PySide2 import QtCore, QtGui, QtWidgets from PySide2.QtCore import Qt from PySide2.QtCore import Signal + +else: + from PySide6 import QtCore, QtGui, QtWidgets + from PySide6.QtCore import Qt + from PySide6.QtCore import Signal class EqualizerBar(QtWidgets.QWidget): diff --git a/qtwidgets/filebrowser/demo_pyside6.py b/qtwidgets/filebrowser/demo_pyside6.py new file mode 100644 index 0000000..43e9a25 --- /dev/null +++ b/qtwidgets/filebrowser/demo_pyside6.py @@ -0,0 +1,26 @@ +from PySide6 import QtCore, QtGui, QtWidgets +from qtwidgets import FileBrowser + + +class Window(QtWidgets.QMainWindow): + + def __init__(self): + super().__init__() + + palette = Palette('paired12') + palette.selected.connect(self.show_selected_color) + self.setCentralWidget(palette) + + def show_selected_color(self, c): + print("Selected: {}".format(c)) + + +app = QtWidgets.QApplication([]) +w = Window() +w.show() +app.exec_() + + + + + diff --git a/qtwidgets/gradient/demo_pyside6.py b/qtwidgets/gradient/demo_pyside6.py new file mode 100644 index 0000000..94855b3 --- /dev/null +++ b/qtwidgets/gradient/demo_pyside6.py @@ -0,0 +1,23 @@ +from PySide6 import QtCore, QtGui, QtWidgets +from qtwidgets import Gradient + + +class Window(QtWidgets.QMainWindow): + + def __init__(self): + super().__init__() + + gradient = Gradient() + gradient.setGradient([(0, 'black'), (1, 'green'), (0.5, 'red')]) + self.setCentralWidget(gradient) + + +app = QtWidgets.QApplication([]) +w = Window() +w.show() +app.exec_() + + + + + diff --git a/qtwidgets/gradient/gradient.py b/qtwidgets/gradient/gradient.py index e995fb3..0e2038e 100644 --- a/qtwidgets/gradient/gradient.py +++ b/qtwidgets/gradient/gradient.py @@ -4,11 +4,15 @@ from PyQt5.QtCore import Qt from PyQt5.QtCore import pyqtSignal as Signal -else: +elif 'PySide2' in sys.modules: from PySide2 import QtCore, QtGui, QtWidgets from PySide2.QtCore import Qt from PySide2.QtCore import Signal - + +else: + from PySide6 import QtCore, QtGui, QtWidgets + from PySide6.QtCore import Qt + from PySide6.QtCore import Signal class Gradient(QtWidgets.QWidget): diff --git a/qtwidgets/paint/demo_pyside6.py b/qtwidgets/paint/demo_pyside6.py new file mode 100644 index 0000000..3cb1c9e --- /dev/null +++ b/qtwidgets/paint/demo_pyside6.py @@ -0,0 +1,24 @@ +from PySide6 import QtCore, QtGui, QtWidgets +from qtwidgets import Paint + + +class Window(QtWidgets.QMainWindow): + + def __init__(self): + super().__init__() + + paint = Paint(300, 300) + paint.setPenWidth(5) + paint.setPenColor('#EB5160') + self.setCentralWidget(paint) + + +app = QtWidgets.QApplication([]) +w = Window() +w.show() +app.exec_() + + + + + diff --git a/qtwidgets/paint/paint.py b/qtwidgets/paint/paint.py index 150ff3c..aef59a9 100644 --- a/qtwidgets/paint/paint.py +++ b/qtwidgets/paint/paint.py @@ -3,10 +3,13 @@ from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtCore import Qt -else: +elif 'PySide2' in sys.modules: from PySide2 import QtCore, QtGui, QtWidgets from PySide2.QtCore import Qt +else: + from PySide6 import QtCore, QtGui, QtWidgets + from PySide6.QtCore import Qt class Paint(QtWidgets.QLabel): diff --git a/qtwidgets/palette/demo_pyside6.py b/qtwidgets/palette/demo_pyside6.py new file mode 100644 index 0000000..dcef9c9 --- /dev/null +++ b/qtwidgets/palette/demo_pyside6.py @@ -0,0 +1,26 @@ +from PySide6 import QtCore, QtGui, QtWidgets +from qtwidgets import PaletteGrid, PaletteHorizontal, PaletteVertical + + +class Window(QtWidgets.QMainWindow): + + def __init__(self): + super().__init__() + + palette = PaletteGrid('17undertones') # or PaletteHorizontal, or PaletteVertical + palette.selected.connect(self.show_selected_color) + self.setCentralWidget(palette) + + def show_selected_color(self, c): + print("Selected: {}".format(c)) + + +app = QtWidgets.QApplication([]) +w = Window() +w.show() +app.exec_() + + + + + diff --git a/qtwidgets/palette/palette.py b/qtwidgets/palette/palette.py index 3f6afdb..f1bf5e0 100644 --- a/qtwidgets/palette/palette.py +++ b/qtwidgets/palette/palette.py @@ -3,11 +3,14 @@ from PyQt5 import QtCore, QtWidgets from PyQt5.QtCore import Qt, pyqtSignal as Signal -else: +elif 'PySide2' in sys.modules: from PySide2 import QtCore, QtWidgets - from PySide2.QtCore import Signal - + from PySide2.QtCore import Qt +else: + from PySide6 import QtCore, QtWidgets + from PySide6.QtCore import Qt, Signal + PALETTES = { # bokeh paired 12 'paired12':['#000000', '#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928', '#ffffff'], diff --git a/qtwidgets/passwordedit/demo_pyside6.py b/qtwidgets/passwordedit/demo_pyside6.py new file mode 100644 index 0000000..c1712d6 --- /dev/null +++ b/qtwidgets/passwordedit/demo_pyside6.py @@ -0,0 +1,22 @@ +from PySide6 import QtCore, QtGui, QtWidgets +from qtwidgets import PasswordEdit + + +class Window(QtWidgets.QMainWindow): + + def __init__(self): + super().__init__() + + password = PasswordEdit() + self.setCentralWidget(password) + + +app = QtWidgets.QApplication([]) +w = Window() +w.show() +app.exec_() + + + + + diff --git a/qtwidgets/passwordedit/password.py b/qtwidgets/passwordedit/password.py index 0f524bf..cda422e 100644 --- a/qtwidgets/passwordedit/password.py +++ b/qtwidgets/passwordedit/password.py @@ -5,12 +5,17 @@ from PyQt5.QtCore import pyqtSignal as Signal from . import resources_pyqt5 -else: +elif 'PySide2' in sys.modules: from PySide2 import QtCore, QtGui, QtWidgets from PySide2.QtCore import Qt from PySide2.QtCore import Signal from . import resources_pyside2 +else: + from PySide6 import QtCore, QtGui, QtWidgets + from PySide6.QtCore import Qt + from PySide6.QtCore import Signal + #from . import resources_pyside6 class PasswordEdit(QtWidgets.QLineEdit): """ diff --git a/qtwidgets/power_bar/demo_pyside6.py b/qtwidgets/power_bar/demo_pyside6.py new file mode 100644 index 0000000..7a1f306 --- /dev/null +++ b/qtwidgets/power_bar/demo_pyside6.py @@ -0,0 +1,15 @@ +from PySide6 import QtCore, QtGui, QtWidgets +from qtwidgets import PowerBar + + +app = QtWidgets.QApplication([]) +volume = PowerBar(["#053061", "#2166ac", "#4393c3", "#92c5de", "#d1e5f0", "#f7f7f7", "#fddbc7", "#f4a582", "#d6604d", "#b2182b", "#67001f"]) +volume.setBarSolidPercent(0.8) +volume.setBarPadding(5) +volume.show() +app.exec_() + + + + + diff --git a/qtwidgets/power_bar/power_bar.py b/qtwidgets/power_bar/power_bar.py index f2f0537..72966cc 100644 --- a/qtwidgets/power_bar/power_bar.py +++ b/qtwidgets/power_bar/power_bar.py @@ -4,11 +4,15 @@ from PyQt5.QtCore import Qt from PyQt5.QtCore import pyqtSignal as Signal -else: +elif 'PySide2' in sys.modules: from PySide2 import QtCore, QtGui, QtWidgets from PySide2.QtCore import Qt from PySide2.QtCore import Signal - + +else: + from PySide6 import QtCore, QtGui, QtWidgets + from PySide6.QtCore import Qt + from PySide6.QtCore import Signal class _Bar(QtWidgets.QWidget): diff --git a/qtwidgets/scrubber/demo_pyside6.py b/qtwidgets/scrubber/demo_pyside6.py new file mode 100644 index 0000000..8dd6ef3 --- /dev/null +++ b/qtwidgets/scrubber/demo_pyside6.py @@ -0,0 +1,26 @@ +from PySide6 import QtCore, QtGui, QtWidgets +from qtwidgets import PaletteGrid + + +class Window(QtWidgets.QMainWindow): + + def __init__(self): + super().__init__() + + palette = PaletteGrid('paired12') + palette.selected.connect(self.show_selected_color) + self.setCentralWidget(palette) + + def show_selected_color(self, c): + print("Selected: {}".format(c)) + + +app = QtWidgets.QApplication([]) +w = Window() +w.show() +app.exec_() + + + + + diff --git a/qtwidgets/stopwatch/demo_pyside6.py b/qtwidgets/stopwatch/demo_pyside6.py new file mode 100644 index 0000000..e212262 --- /dev/null +++ b/qtwidgets/stopwatch/demo_pyside6.py @@ -0,0 +1,33 @@ +from PySide6 import QtCore, QtGui, QtWidgets +from qtwidgets import Toggle, AnimatedToggle + + +class Window(QtWidgets.QMainWindow): + + def __init__(self): + super().__init__() + + toggle_1 = AnimatedToggle() + toggle_2 = AnimatedToggle( + checked_color="#FFB000", + pulse_checked_color="#44FFB000" + ) + + container = QtWidgets.QWidget() + layout = QtWidgets.QVBoxLayout() + layout.addWidget(toggle_1) + layout.addWidget(toggle_2) + container.setLayout(layout) + + self.setCentralWidget(container) + + +app = QtWidgets.QApplication([]) +w = Window() +w.show() +app.exec_() + + + + + diff --git a/qtwidgets/toggle/demo_pyside6.py b/qtwidgets/toggle/demo_pyside6.py new file mode 100644 index 0000000..c5603ea --- /dev/null +++ b/qtwidgets/toggle/demo_pyside6.py @@ -0,0 +1,32 @@ +from PySide6 import QtCore, QtGui, QtWidgets +from qtwidgets import Toggle, AnimatedToggle + + +class Window(QtWidgets.QMainWindow): + + def __init__(self): + super().__init__() + + toggle_1 = Toggle() + toggle_2 = AnimatedToggle( + checked_color="#FFB000", + pulse_checked_color="#44FFB000" + ) + + container = QtWidgets.QWidget() + layout = QtWidgets.QVBoxLayout() + layout.addWidget(toggle_1) + layout.addWidget(toggle_2) + container.setLayout(layout) + + self.setCentralWidget(container) + + +app = QtWidgets.QApplication([]) +w = Window() +w.show() +app.exec_() + + + + diff --git a/qtwidgets/toggle/toggle.py b/qtwidgets/toggle/toggle.py index a701d88..04d9c29 100644 --- a/qtwidgets/toggle/toggle.py +++ b/qtwidgets/toggle/toggle.py @@ -10,7 +10,7 @@ from PyQt5.QtCore import pyqtSlot as Slot, pyqtProperty as Property -else: +elif 'PySide2' in sys.modules: from PySide2.QtCore import ( Qt, QSize, QPoint, QPointF, QRectF, QEasingCurve, QPropertyAnimation, QSequentialAnimationGroup, @@ -18,8 +18,15 @@ from PySide2.QtWidgets import QCheckBox from PySide2.QtGui import QColor, QBrush, QPaintEvent, QPen, QPainter + +else: + from PySide6.QtCore import ( + Qt, QSize, QPoint, QPointF, QRectF, + QEasingCurve, QPropertyAnimation, QSequentialAnimationGroup, + Slot, Property) - + from PySide6.QtWidgets import QCheckBox + from PySide6.QtGui import QColor, QBrush, QPaintEvent, QPen, QPainter class Toggle(QCheckBox): diff --git a/setup.py b/setup.py index 6bc3260..28d32fe 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ from setuptools import setup, find_packages -version = '0.18' +version = '0.19' with open("README.md", "r") as fh: long_description = fh.read()