Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 27 additions & 12 deletions formlayout.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@

# ---+- PyQt-PySide compatibility -+----
_modname = os.environ.setdefault('QT_API', 'pyqt')
assert _modname in ('pyqt', 'pyqt5', 'pyside')
assert _modname in ('pyqt', 'pyqt5', 'pyside', 'pyside2')

if os.environ['QT_API'].startswith('pyqt'):
try:
Expand All @@ -63,13 +63,18 @@
try:
import PySide # analysis:ignore
except ImportError:
raise ImportError("formlayout requires PyQt4, PyQt5 or PySide")
# Switching to PySide2
os.environ['QT_API'] = _modname = 'pyside2'
try:
import PySide2 # analysis:ignore
except ImportError:
raise ImportError("formlayout requires PyQt4, PyQt5, PySide or PySide2")

if os.environ['QT_API'] == 'pyqt':
try:
from PyQt4.QtGui import QFormLayout
except ImportError:
raise ImportError("formlayout requires PyQt4, PyQt5 or PySide")
raise ImportError("formlayout requires PyQt4, PyQt5, PySide or PySide2")
from PyQt4.QtGui import * # analysis:ignore
from PyQt4.QtCore import * # analysis:ignore
from PyQt4.QtCore import pyqtSlot as Slot
Expand All @@ -90,6 +95,12 @@
from PySide.QtGui import * # analysis:ignore
from PySide.QtCore import * # analysis:ignore
QT_LIB = 'PySide'

if os.environ['QT_API'] == 'pyside2':
from PySide2.QtGui import * # analysis:ignore
from PySide2.QtCore import * # analysis:ignore
from PySide2.QtWidgets import * # analysis:ignore
QT_LIB = 'PySide2'


# ---+- Python 2-3 compatibility -+----
Expand Down Expand Up @@ -158,10 +169,18 @@ class ColorButton(QPushButton):
if SIGNAL is None:
colorChanged = Signal("QColor")

def __init__(self, parent=None):
def __init__(self, parent=None, colorChanged_slot=None):
QPushButton.__init__(self, parent)
self.setFixedSize(20, 20)
self.setIconSize(QSize(12, 12))

if colorChanged_slot:
if SIGNAL is None:
self.colorChanged.connect(colorChanged_slot)
else:
self.connect(self, SIGNAL("colorChanged(QColor)"),
colorChanged_slot)

if SIGNAL is None:
self.clicked.connect(self.choose_color)
else:
Expand Down Expand Up @@ -224,13 +243,9 @@ def __init__(self, color, parent=None):
self.connect(self.lineedit, SIGNAL("textChanged(QString)"),
self.update_color)
self.addWidget(self.lineedit)
self.colorbtn = ColorButton(parent)
self.colorbtn = ColorButton(parent, self.update_text)
self.colorbtn.color = color
if SIGNAL is None:
self.colorbtn.colorChanged.connect(self.update_text)
else:
self.connect(self.colorbtn, SIGNAL("colorChanged(QColor)"),
self.update_text)

self.addWidget(self.colorbtn)

def update_color(self, text):
Expand Down Expand Up @@ -569,8 +584,8 @@ def setup(self):
field = PushLayout(value, self)
self.formlayout.addRow(field)
else:
img_fmt = tuple(['.'+str(bytes(ext).decode()) for ext
in QImageReader.supportedImageFormats()])
img_fmt = tuple(['.'+str(bytes(ext.data() if QT_LIB == "PySide" or QT_LIB == "PySide2" else ext).decode())
for ext in QImageReader.supportedImageFormats()])
if value.endswith(img_fmt):
# Image
pixmap = QPixmap(value)
Expand Down
7 changes: 6 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,12 @@
# details
import zlib

from formlayout import __version__ as version
# Work-around: read version from formlayout.py
# without importing it (avoids PySide/PyQt dependency during installation)
import re
with open('formlayout.py', 'r', encoding='utf-8') as f:
version = re.search(r"__version__\s*=\s*['\"]([^'\"]+)['\"]", f.read()).group(1)

LIBNAME = 'formlayout'

import setuptools # analysis:ignore
Expand Down