Merge pull request #1318 from blink1073/pyqt5

Update viewer for PyQt5 compatibility
This commit is contained in:
Stefan van der Walt
2015-01-21 13:27:40 -08:00
24 changed files with 149 additions and 220 deletions
-1
View File
@@ -60,7 +60,6 @@ import os.path as _osp
import imp as _imp
import functools as _functools
import warnings as _warnings
from skimage._shared.utils import deprecated as _deprecated
pkg_dir = _osp.abspath(_osp.dirname(__file__))
data_dir = _osp.join(pkg_dir, 'data')
+4 -9
View File
@@ -1,11 +1,6 @@
from warnings import warn
from skimage._shared.version_requirements import is_installed
import warnings
from .viewers import ImageViewer, CollectionViewer
from .qt import qt_api
from .qt import has_qt
viewer_available = not qt_api is None and is_installed('matplotlib')
if not viewer_available:
warn('Viewer requires matplotlib and Qt')
del qt_api, is_installed, warn
if not has_qt:
warnings.warn('Viewer requires Qt')
+1 -4
View File
@@ -1,8 +1,5 @@
import numpy as np
try:
from matplotlib import lines
except ImportError:
pass
from matplotlib import lines
__all__ = ['CanvasToolBase', 'ToolHandles']
+1 -4
View File
@@ -1,9 +1,6 @@
import numpy as np
try:
from matplotlib import lines
except ImportError:
pass
from matplotlib import lines
from skimage.viewer.canvastools.base import CanvasToolBase, ToolHandles
+4 -7
View File
@@ -1,11 +1,8 @@
import numpy as np
try:
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
LABELS_CMAP = mcolors.ListedColormap(['white', 'red', 'dodgerblue', 'gold',
'greenyellow', 'blueviolet'])
except ImportError:
pass
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
LABELS_CMAP = mcolors.ListedColormap(['white', 'red', 'dodgerblue', 'gold',
'greenyellow', 'blueviolet'])
from skimage.viewer.canvastools.base import CanvasToolBase
+1 -5
View File
@@ -1,8 +1,4 @@
try:
from matplotlib.widgets import RectangleSelector
except ImportError:
RectangleSelector = object
from matplotlib.widgets import RectangleSelector
from skimage.viewer.canvastools.base import CanvasToolBase
from skimage.viewer.canvastools.base import ToolHandles
+4 -12
View File
@@ -4,19 +4,11 @@ Base class for Plugins that interact with ImageViewer.
from warnings import warn
import numpy as np
from ..qt import QtGui, qt_api
from ..qt.QtCore import Qt, Signal
from ..qt import QtWidgets, QtCore, Signal
from ..utils import RequiredAttr, init_qtapp
from skimage._shared.testing import doctest_skip_parser
if qt_api is not None:
has_qt = True
else:
has_qt = False
class Plugin(QtGui.QDialog):
class Plugin(QtWidgets.QDialog):
"""Base class for plugins that interact with an ImageViewer.
A plugin connects an image filter (or another function) to an image viewer.
@@ -101,7 +93,7 @@ class Plugin(QtGui.QDialog):
"then the `image_filter` argument is ignored.")
self.setWindowTitle(self.name)
self.layout = QtGui.QGridLayout(self)
self.layout = QtWidgets.QGridLayout(self)
self.resize(width, height)
self.row = 0
@@ -124,7 +116,7 @@ class Plugin(QtGui.QDialog):
the image matches the filtered value specified by attached widgets.
"""
self.setParent(image_viewer)
self.setWindowFlags(Qt.Dialog)
self.setWindowFlags(QtCore.Qt.Dialog)
self.image_viewer = image_viewer
self.image_viewer.plugins.append(self)
+1 -4
View File
@@ -1,8 +1,5 @@
import numpy as np
try:
import matplotlib.pyplot as plt
except ImportError:
pass
import matplotlib.pyplot as plt
from skimage import color
from skimage import exposure
from .plotplugin import PlotPlugin
+1 -1
View File
@@ -1,6 +1,6 @@
import numpy as np
from ..qt import QtGui
from ..qt import QtGui
from ..utils import new_plot
from .base import Plugin
+44
View File
@@ -0,0 +1,44 @@
_qt_version = None
has_qt = True
try:
from matplotlib.backends.qt_compat import QtGui, QtCore, QtWidgets, QT_RC_MAJOR_VERSION as _qt_version
except ImportError:
try:
from matplotlib.backends.qt4_compat import QtGui, QtCore
QtWidgets = QtGui
_qt_version = 4
except ImportError:
# Mock objects
class QtGui_cls(object):
QMainWindow = object
QDialog = object
QWidget = object
class QtCore_cls(object):
class Qt(object):
TopDockWidgetArea = None
BottomDockWidgetArea = None
LeftDockWidgetArea = None
RightDockWidgetArea = None
def Signal(self, *args, **kwargs):
pass
QtGui = QtWidgets = QtGui_cls()
QtCore = QtCore_cls()
has_qt = False
if _qt_version == 5:
from matplotlib.backends.backend_qt5 import FigureManagerQT
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg
elif _qt_version == 4:
from matplotlib.backends.backend_qt4 import FigureManagerQT
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg
else:
FigureManagerQT = object
FigureCanvasQTAgg = object
Qt = QtCore.Qt
Signal = QtCore.Signal
-22
View File
@@ -1,22 +0,0 @@
from . import qt_api
if qt_api == 'pyside':
from PySide.QtCore import *
elif qt_api == 'pyqt':
from PyQt4.QtCore import *
# Use pyside names for signals and slots
Signal = pyqtSignal
Slot = pyqtSlot
else:
# Mock objects for buildbot (which doesn't have Qt, but imports viewer).
class Qt(object):
TopDockWidgetArea = None
BottomDockWidgetArea = None
LeftDockWidgetArea = None
RightDockWidgetArea = None
def Signal(*args, **kwargs):
pass
def Slot(*args, **kwargs):
pass
-11
View File
@@ -1,11 +0,0 @@
from . import qt_api
if qt_api == 'pyside':
from PySide.QtGui import *
elif qt_api == 'pyqt':
from PyQt4.QtGui import *
else:
# Mock objects
QMainWindow = object
QDialog = object
QWidget = object
-5
View File
@@ -1,5 +0,0 @@
This qt subpackage provides a wrapper to allow use of either PySide or PyQt4.
In addition, if neither package is available, some mock objects are created to
prevent errors in the TravisCI build. Only the objects used in the global
namespace need to be mocked (e.g., a Qt object that gets subclassed is used
in the global namespace).
-22
View File
@@ -1,22 +0,0 @@
import os
import warnings
qt_api = os.environ.get('QT_API')
if qt_api is None:
try:
import PyQt4
qt_api = 'pyqt'
except ImportError:
try:
import PySide
qt_api = 'pyside'
except ImportError:
qt_api = None
# Note that we don't want to raise an error because that would
# cause the TravisCI build to fail.
warnings.warn("Could not import PyQt4: ImageViewer not available!")
if qt_api is not None:
os.environ['QT_API'] = qt_api
+15 -15
View File
@@ -4,14 +4,14 @@ import skimage
import skimage.data as data
from skimage.filters.rank import median
from skimage.morphology import disk
from skimage.viewer import ImageViewer, viewer_available
from numpy.testing import assert_equal, assert_allclose, assert_almost_equal
from numpy.testing.decorators import skipif
from skimage.viewer import ImageViewer, has_qt
from skimage.viewer.plugins.base import Plugin
from skimage.viewer.widgets import Slider
from skimage.viewer.plugins import (
LineProfile, Measure, CannyPlugin, LabelPainter, Crop, ColorHistogram,
PlotPlugin)
from skimage.viewer.plugins.base import Plugin
from skimage.viewer.widgets import Slider
from numpy.testing import assert_equal, assert_allclose, assert_almost_equal
from numpy.testing.decorators import skipif
from skimage._shared._warnings import expected_warnings
@@ -22,7 +22,7 @@ def setup_line_profile(image, limits='image'):
return plugin
@skipif(not viewer_available)
@skipif(not has_qt)
def test_line_profile():
""" Test a line profile using an ndim=2 image"""
plugin = setup_line_profile(data.camera())
@@ -36,7 +36,7 @@ def test_line_profile():
assert_allclose(scan_data.mean(), 0.2812, rtol=1e-3)
@skipif(not viewer_available)
@skipif(not has_qt)
def test_line_profile_rgb():
""" Test a line profile using an ndim=3 image"""
plugin = setup_line_profile(data.chelsea(), limits=None)
@@ -51,7 +51,7 @@ def test_line_profile_rgb():
assert_allclose(scan_data.mean(), 0.4359, rtol=1e-3)
@skipif(not viewer_available)
@skipif(not has_qt)
def test_line_profile_dynamic():
"""Test a line profile updating after an image transform"""
image = data.coins()[:-50, :] # shave some off to make the line lower
@@ -77,7 +77,7 @@ def test_line_profile_dynamic():
assert_almost_equal(np.max(line) - np.min(line), 0.639, 1)
@skipif(not viewer_available)
@skipif(not has_qt)
def test_measure():
image = data.camera()
viewer = ImageViewer(image)
@@ -89,7 +89,7 @@ def test_measure():
assert_equal(str(m._angle.text[:5]), '135.0')
@skipif(not viewer_available)
@skipif(not has_qt)
def test_canny():
image = data.camera()
viewer = ImageViewer(image)
@@ -102,7 +102,7 @@ def test_canny():
assert edges.sum() == 2852
@skipif(not viewer_available)
@skipif(not has_qt)
def test_label_painter():
image = data.camera()
moon = data.moon()
@@ -120,7 +120,7 @@ def test_label_painter():
assert_equal(lp.paint_tool.shape, moon.shape)
@skipif(not viewer_available)
@skipif(not has_qt)
def test_crop():
image = data.camera()
viewer = ImageViewer(image)
@@ -131,7 +131,7 @@ def test_crop():
assert_equal(viewer.image.shape, (101, 101))
@skipif(not viewer_available)
@skipif(not has_qt)
def test_color_histogram():
image = skimage.img_as_float(data.load('color.png'))
viewer = ImageViewer(image)
@@ -143,7 +143,7 @@ def test_color_histogram():
assert_almost_equal(viewer.image.std(), 0.325, 3)
@skipif(not viewer_available)
@skipif(not has_qt)
def test_plot_plugin():
viewer = ImageViewer(data.moon())
plugin = PlotPlugin(image_filter=lambda x: x)
@@ -155,7 +155,7 @@ def test_plot_plugin():
viewer.close()
@skipif(not viewer_available)
@skipif(not has_qt)
def test_plugin():
img = skimage.img_as_float(data.moon())
viewer = ImageViewer(img)
+6 -7
View File
@@ -4,14 +4,13 @@ import numpy as np
from numpy.testing import assert_equal
from numpy.testing.decorators import skipif
from skimage import data
from skimage.viewer import ImageViewer, viewer_available
from skimage.viewer import ImageViewer, has_qt
from skimage.viewer.canvastools import (
LineTool, ThickLineTool, RectangleTool, PaintTool)
from skimage.viewer.canvastools.base import CanvasToolBase
from matplotlib.testing.decorators import cleanup
def get_end_points(image):
h, w = image.shape[0:2]
x = [w / 3, 2 * w / 3]
@@ -75,7 +74,7 @@ def do_event(viewer, etype, button=1, xdata=0, ydata=0, key=None):
@cleanup
@skipif(not viewer_available)
@skipif(not has_qt)
def test_line_tool():
img = data.camera()
viewer = ImageViewer(img)
@@ -101,7 +100,7 @@ def test_line_tool():
@cleanup
@skipif(not viewer_available)
@skipif(not has_qt)
def test_thick_line_tool():
img = data.camera()
viewer = ImageViewer(img)
@@ -125,7 +124,7 @@ def test_thick_line_tool():
@cleanup
@skipif(not viewer_available)
@skipif(not has_qt)
def test_rect_tool():
img = data.camera()
viewer = ImageViewer(img)
@@ -154,7 +153,7 @@ def test_rect_tool():
@cleanup
@skipif(not viewer_available)
@skipif(not has_qt)
def test_paint_tool():
img = data.moon()
viewer = ImageViewer(img)
@@ -188,7 +187,7 @@ def test_paint_tool():
@cleanup
@skipif(not viewer_available)
@skipif(not has_qt)
def test_base_tool():
img = data.moon()
viewer = ImageViewer(img)
+5 -8
View File
@@ -1,14 +1,11 @@
# -*- coding: utf-8 -*-
from skimage.viewer import viewer_available
from skimage.viewer.qt import QtCore, QtGui
from skimage.viewer import utils
from skimage.viewer.utils import dialogs
from skimage.viewer.qt import QtCore, QtGui, has_qt
from numpy.testing.decorators import skipif
from skimage.viewer import utils
from skimage.viewer.utils import dialogs
@skipif(not viewer_available)
@skipif(not has_qt)
def test_event_loop():
utils.init_qtapp()
timer = QtCore.QTimer()
@@ -16,7 +13,7 @@ def test_event_loop():
utils.start_qtapp()
@skipif(not viewer_available)
@skipif(not has_qt)
def test_format_filename():
fname = dialogs._format_filename(('apple', 2))
assert fname == 'apple'
@@ -24,7 +21,7 @@ def test_format_filename():
assert fname is None
@skipif(not viewer_available)
@skipif(not has_qt)
def test_open_file_dialog():
utils.init_qtapp()
timer = QtCore.QTimer()
@@ -33,7 +30,7 @@ def test_open_file_dialog():
assert filename is None
@skipif(not viewer_available)
@skipif(not has_qt)
def test_save_file_dialog():
utils.init_qtapp()
timer = QtCore.QTimer()
+8 -6
View File
@@ -1,9 +1,11 @@
from skimage import data
from skimage.viewer.qt import QtGui, QtCore
from skimage.viewer import ImageViewer, CollectionViewer, viewer_available
from skimage.transform import pyramid_gaussian
from skimage.viewer.qt import QtGui, QtCore, has_qt
from skimage.viewer import ImageViewer, CollectionViewer
from skimage.viewer.plugins import OverlayPlugin
from skimage.transform import pyramid_gaussian
from skimage.filters import sobel
from numpy.testing import assert_equal
from numpy.testing.decorators import skipif
@@ -11,7 +13,7 @@ from skimage._shared.version_requirements import is_installed
from skimage._shared._warnings import expected_warnings
@skipif(not viewer_available)
@skipif(not has_qt)
def test_viewer():
astro = data.astronaut()
coins = data.coins()
@@ -38,7 +40,7 @@ def make_key_event(key):
QtCore.Qt.NoModifier)
@skipif(not viewer_available)
@skipif(not has_qt)
def test_collection_viewer():
img = data.astronaut()
@@ -54,7 +56,7 @@ def test_collection_viewer():
view._format_coord(10, 10)
@skipif(not viewer_available)
@skipif(not has_qt)
@skipif(not is_installed('matplotlib', '>=1.2'))
def test_viewer_with_overlay():
img = data.coins()
+11 -9
View File
@@ -1,11 +1,13 @@
import os
from skimage import data, img_as_float, io, img_as_uint
from skimage.viewer import ImageViewer, viewer_available
from skimage.viewer import ImageViewer
from skimage.viewer.qt import QtGui, QtCore, has_qt
from skimage.viewer.widgets import (
Slider, OKCancelButtons, SaveButtons, ComboBox, CheckBox, Text)
from skimage.viewer.plugins.base import Plugin
from skimage.viewer.qt import QtGui, QtCore
from numpy.testing import assert_almost_equal, assert_equal
from numpy.testing.decorators import skipif
from skimage._shared._warnings import expected_warnings
@@ -18,7 +20,7 @@ def get_image_viewer():
return viewer
@skipif(not viewer_available)
@skipif(not has_qt)
def test_check_box():
viewer = get_image_viewer()
cb = CheckBox('hello', value=True, alignment='left')
@@ -33,7 +35,7 @@ def test_check_box():
assert_equal(cb.val, False)
@skipif(not viewer_available)
@skipif(not has_qt)
def test_combo_box():
viewer = get_image_viewer()
cb = ComboBox('hello', ('a', 'b', 'c'))
@@ -46,7 +48,7 @@ def test_combo_box():
assert_equal(cb.index, 2)
@skipif(not viewer_available)
@skipif(not has_qt)
def test_text_widget():
viewer = get_image_viewer()
txt = Text('hello', 'hello, world!')
@@ -57,7 +59,7 @@ def test_text_widget():
assert_equal(str(txt.text), 'goodbye, world!')
@skipif(not viewer_available)
@skipif(not has_qt)
def test_slider_int():
viewer = get_image_viewer()
sld = Slider('radius', 2, 10, value_type='int')
@@ -71,7 +73,7 @@ def test_slider_int():
assert_equal(sld.val, 5)
@skipif(not viewer_available)
@skipif(not has_qt)
def test_slider_float():
viewer = get_image_viewer()
sld = Slider('alpha', 2.1, 3.1, value=2.1, value_type='float',
@@ -86,7 +88,7 @@ def test_slider_float():
assert_almost_equal(sld.val, 2.5, 2)
@skipif(not viewer_available)
@skipif(not has_qt)
def test_save_buttons():
viewer = get_image_viewer()
sv = SaveButtons()
@@ -114,7 +116,7 @@ def test_save_buttons():
os.remove(filename)
@skipif(not viewer_available)
@skipif(not has_qt)
def test_ok_buttons():
viewer = get_image_viewer()
ok = OKCancelButtons()
+11 -24
View File
@@ -1,28 +1,15 @@
import warnings
import numpy as np
from skimage.viewer.qt import QtWidgets, has_qt, FigureManagerQT, FigureCanvasQTAgg
import matplotlib as mpl
from matplotlib.figure import Figure
from matplotlib import _pylab_helpers
from matplotlib.colors import LinearSegmentedColormap
from ..qt import qt_api
try:
import matplotlib as mpl
from matplotlib.figure import Figure
from matplotlib import _pylab_helpers
from matplotlib.colors import LinearSegmentedColormap
if not qt_api is None:
from matplotlib.backends.backend_qt4 import FigureManagerQT
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg
if 'agg' not in mpl.get_backend().lower():
print("Recommended matplotlib backend is `Agg` for full "
if has_qt and 'agg' not in mpl.get_backend().lower():
warnings.warn("Recommended matplotlib backend is `Agg` for full "
"skimage.viewer functionality.")
else:
FigureCanvasQTAgg = object
LinearSegmentedColormap = object
except ImportError:
FigureCanvasQTAgg = object # hack to prevent nosetest and autodoc errors
LinearSegmentedColormap = object
from ..qt import QtGui
__all__ = ['init_qtapp', 'start_qtapp', 'RequiredAttr', 'figimage',
@@ -39,9 +26,9 @@ def init_qtapp():
The QApplication needs to be initialized before creating any QWidgets
"""
global QApp
QApp = QtGui.QApplication.instance()
QApp = QtWidgets.QApplication.instance()
if QApp is None:
QApp = QtGui.QApplication([])
QApp = QtWidgets.QApplication([])
return QApp
@@ -128,8 +115,8 @@ class FigureCanvas(FigureCanvasQTAgg):
self.fig = figure
FigureCanvasQTAgg.__init__(self, self.fig)
FigureCanvasQTAgg.setSizePolicy(self,
QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
QtWidgets.QSizePolicy.Expanding,
QtWidgets.QSizePolicy.Expanding)
FigureCanvasQTAgg.updateGeometry(self)
def resizeEvent(self, event):
+1 -1
View File
@@ -1,6 +1,6 @@
import os
from ..qt import QtGui
from skimage.viewer.qt import QtGui
__all__ = ['open_file_dialog', 'save_file_dialog']
+13 -19
View File
@@ -1,21 +1,15 @@
"""
ImageViewer class for viewing and interacting with images.
"""
from ..qt import QtGui, qt_api
from ..qt.QtCore import Qt, Signal
if qt_api is not None:
has_qt = True
else:
has_qt = False
from skimage.viewer.qt import QtWidgets, Qt, Signal
from skimage import io, img_as_float
from skimage.util.dtype import dtype_range
from skimage.exposure import rescale_intensity
import numpy as np
from .. import utils
from ..widgets import Slider
from ..utils import dialogs
from ..utils import (
dialogs, init_qtapp, figimage, start_qtapp, update_axes_image)
from ..plugins.base import Plugin
@@ -152,7 +146,7 @@ class EventManager(object):
tool.on_scroll(event)
class ImageViewer(QtGui.QMainWindow):
class ImageViewer(QtWidgets.QMainWindow):
"""Viewer for displaying images.
This viewer is a simple container object that holds a Matplotlib axes
@@ -194,7 +188,7 @@ class ImageViewer(QtGui.QMainWindow):
def __init__(self, image, useblit=True):
# Start main loop
utils.init_qtapp()
init_qtapp()
super(ImageViewer, self).__init__()
#TODO: Add ImageViewer to skimage.io window manager
@@ -202,7 +196,7 @@ class ImageViewer(QtGui.QMainWindow):
self.setAttribute(Qt.WA_DeleteOnClose)
self.setWindowTitle("Image Viewer")
self.file_menu = QtGui.QMenu('&File', self)
self.file_menu = QtWidgets.QMenu('&File', self)
self.file_menu.addAction('Open file', self.open_file,
Qt.CTRL + Qt.Key_O)
self.file_menu.addAction('Save to file', self.save_to_file,
@@ -211,7 +205,7 @@ class ImageViewer(QtGui.QMainWindow):
Qt.CTRL + Qt.Key_Q)
self.menuBar().addMenu(self.file_menu)
self.main_widget = QtGui.QWidget()
self.main_widget = QtWidgets.QWidget()
self.setCentralWidget(self.main_widget)
if isinstance(image, Plugin):
@@ -221,7 +215,7 @@ class ImageViewer(QtGui.QMainWindow):
# When plugin is started, start
plugin._started.connect(self._show)
self.fig, self.ax = utils.figimage(image)
self.fig, self.ax = figimage(image)
self.canvas = self.fig.canvas
self.canvas.setParent(self)
self.ax.autoscale(enable=False)
@@ -236,7 +230,7 @@ class ImageViewer(QtGui.QMainWindow):
self._update_original_image(image)
self.plugins = []
self.layout = QtGui.QVBoxLayout(self.main_widget)
self.layout = QtWidgets.QVBoxLayout(self.main_widget)
self.layout.addWidget(self.canvas)
status_bar = self.statusBar()
@@ -255,7 +249,7 @@ class ImageViewer(QtGui.QMainWindow):
if plugin.dock:
location = self.dock_areas[plugin.dock]
dock_location = Qt.DockWidgetArea(location)
dock = QtGui.QDockWidget()
dock = QtWidgets.QDockWidget()
dock.setWidget(plugin)
dock.setWindowTitle(plugin.name)
self.addDockWidget(dock_location, dock)
@@ -341,7 +335,7 @@ class ImageViewer(QtGui.QMainWindow):
"""
self._show()
if main_window:
utils.start_qtapp()
start_qtapp()
return [p.output() for p in self.plugins]
def redraw(self):
@@ -357,7 +351,7 @@ class ImageViewer(QtGui.QMainWindow):
@image.setter
def image(self, image):
self._img = image
utils.update_axes_image(self._image_plot, image)
update_axes_image(self._image_plot, image)
# update display (otherwise image doesn't fill the canvas)
h, w = image.shape[:2]
@@ -487,7 +481,7 @@ class CollectionViewer(ImageViewer):
self._update_original_image(image)
def keyPressEvent(self, event):
if type(event) == QtGui.QKeyEvent:
if type(event) == QtWidgets.QKeyEvent:
key = event.key()
# Number keys (code: 0 = key 48, 9 = key 57) move to deciles
if 48 <= key < 58:
+17 -21
View File
@@ -15,17 +15,15 @@ parameter type specified by its `ptype` attribute, which can be:
property of the same name that updates the display.
"""
from ..qt import QtGui
from ..qt import QtCore
from ..qt.QtCore import Qt
from ..qt import QtWidgets, QtCore, Qt
from ..utils import RequiredAttr
__all__ = ['BaseWidget', 'Slider', 'ComboBox', 'CheckBox', 'Text']
class BaseWidget(QtGui.QWidget):
class BaseWidget(QtWidgets.QWidget):
plugin = RequiredAttr("Widget is not attached to a Plugin.")
@@ -49,11 +47,11 @@ class Text(BaseWidget):
def __init__(self, name=None, text=''):
super(Text, self).__init__(name)
self._label = QtGui.QLabel()
self._label = QtWidgets.QLabel()
self.text = text
self.layout = QtGui.QHBoxLayout(self)
self.layout = QtWidgets.QHBoxLayout(self)
if name is not None:
name_label = QtGui.QLabel()
name_label = QtWidgets.QLabel()
name_label.setText(name)
self.layout.addWidget(name_label)
self.layout.addWidget(self._label)
@@ -105,17 +103,17 @@ class Slider(BaseWidget):
# Set widget orientation
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if orientation == 'vertical':
self.slider = QtGui.QSlider(Qt.Vertical)
self.slider = QtWidgets.QSlider(Qt.Vertical)
alignment = QtCore.Qt.AlignHCenter
align_text = QtCore.Qt.AlignHCenter
align_value = QtCore.Qt.AlignHCenter
self.layout = QtGui.QVBoxLayout(self)
self.layout = QtWidgets.QVBoxLayout(self)
elif orientation == 'horizontal':
self.slider = QtGui.QSlider(Qt.Horizontal)
self.slider = QtWidgets.QSlider(Qt.Horizontal)
alignment = QtCore.Qt.AlignVCenter
align_text = QtCore.Qt.AlignLeft
align_value = QtCore.Qt.AlignRight
self.layout = QtGui.QHBoxLayout(self)
self.layout = QtWidgets.QHBoxLayout(self)
else:
msg = "Unexpected value %s for 'orientation'"
raise ValueError(msg % orientation)
@@ -151,11 +149,11 @@ class Slider(BaseWidget):
raise ValueError("Unexpected value %s for 'update_on'" % update_on)
self.slider.setFocusPolicy(QtCore.Qt.StrongFocus)
self.name_label = QtGui.QLabel()
self.name_label = QtWidgets.QLabel()
self.name_label.setText(self.name)
self.name_label.setAlignment(align_text)
self.editbox = QtGui.QLineEdit()
self.editbox = QtWidgets.QLineEdit()
self.editbox.setMaximumWidth(max_edit_width)
self.editbox.setText(self.value_fmt % self.val)
self.editbox.setAlignment(align_value)
@@ -229,20 +227,18 @@ class ComboBox(BaseWidget):
def __init__(self, name, items, ptype='kwarg', callback=None):
super(ComboBox, self).__init__(name, ptype, callback)
self.name_label = QtGui.QLabel()
self.name_label = QtWidgets.QLabel()
self.name_label.setText(self.name)
self.name_label.setAlignment(QtCore.Qt.AlignLeft)
self._combo_box = QtGui.QComboBox()
self._combo_box = QtWidgets.QComboBox()
self._combo_box.addItems(list(items))
self.layout = QtGui.QHBoxLayout(self)
self.layout = QtWidgets.QHBoxLayout(self)
self.layout.addWidget(self.name_label)
self.layout.addWidget(self._combo_box)
self._combo_box.currentIndexChanged.connect(self._value_changed)
# self.connect(self._combo_box,
# SIGNAL("currentIndexChanged(int)"), self.updateUi)
@property
def val(self):
@@ -283,11 +279,11 @@ class CheckBox(BaseWidget):
callback=None):
super(CheckBox, self).__init__(name, ptype, callback)
self._check_box = QtGui.QCheckBox()
self._check_box = QtWidgets.QCheckBox()
self._check_box.setChecked(value)
self._check_box.setText(self.name)
self.layout = QtGui.QHBoxLayout(self)
self.layout = QtWidgets.QHBoxLayout(self)
if alignment == 'center':
self.layout.setAlignment(QtCore.Qt.AlignCenter)
elif alignment == 'left':
+1 -3
View File
@@ -1,8 +1,6 @@
from textwrap import dedent
from ..qt import QtGui
from ..qt import QtCore
from ..qt import QtGui, QtCore
import numpy as np
import skimage