130 lines
3.3 KiB
Python
130 lines
3.3 KiB
Python
|
import os
|
||
|
|
||
|
from skimage import data, img_as_float, io, img_as_uint
|
||
|
|
||
|
from skimage.viewer import ImageViewer
|
||
|
from skimage.viewer.qt import QtWidgets, QtCore, has_qt
|
||
|
from skimage.viewer.widgets import (
|
||
|
Slider, OKCancelButtons, SaveButtons, ComboBox, CheckBox, Text)
|
||
|
from skimage.viewer.plugins.base import Plugin
|
||
|
|
||
|
from skimage._shared import testing
|
||
|
from skimage._shared.testing import assert_almost_equal, assert_equal
|
||
|
|
||
|
|
||
|
def get_image_viewer():
|
||
|
image = data.coins()
|
||
|
viewer = ImageViewer(img_as_float(image))
|
||
|
viewer += Plugin()
|
||
|
return viewer
|
||
|
|
||
|
|
||
|
@testing.skipif(not has_qt, reason="Qt not installed")
|
||
|
def test_check_box():
|
||
|
viewer = get_image_viewer()
|
||
|
cb = CheckBox('hello', value=True, alignment='left')
|
||
|
viewer.plugins[0] += cb
|
||
|
|
||
|
assert_equal(cb.val, True)
|
||
|
cb.val = False
|
||
|
assert_equal(cb.val, False)
|
||
|
cb.val = 1
|
||
|
assert_equal(cb.val, True)
|
||
|
cb.val = 0
|
||
|
assert_equal(cb.val, False)
|
||
|
|
||
|
|
||
|
@testing.skipif(not has_qt, reason="Qt not installed")
|
||
|
def test_combo_box():
|
||
|
viewer = get_image_viewer()
|
||
|
cb = ComboBox('hello', ('a', 'b', 'c'))
|
||
|
viewer.plugins[0] += cb
|
||
|
|
||
|
assert_equal(str(cb.val), 'a')
|
||
|
assert_equal(cb.index, 0)
|
||
|
cb.index = 2
|
||
|
assert_equal(str(cb.val), 'c'),
|
||
|
assert_equal(cb.index, 2)
|
||
|
|
||
|
|
||
|
@testing.skipif(not has_qt, reason="Qt not installed")
|
||
|
def test_text_widget():
|
||
|
viewer = get_image_viewer()
|
||
|
txt = Text('hello', 'hello, world!')
|
||
|
viewer.plugins[0] += txt
|
||
|
|
||
|
assert_equal(str(txt.text), 'hello, world!')
|
||
|
txt.text = 'goodbye, world!'
|
||
|
assert_equal(str(txt.text), 'goodbye, world!')
|
||
|
|
||
|
|
||
|
@testing.skipif(not has_qt, reason="Qt not installed")
|
||
|
def test_slider_int():
|
||
|
viewer = get_image_viewer()
|
||
|
sld = Slider('radius', 2, 10, value_type='int')
|
||
|
viewer.plugins[0] += sld
|
||
|
|
||
|
assert_equal(sld.val, 4)
|
||
|
sld.val = 6
|
||
|
assert_equal(sld.val, 6)
|
||
|
sld.editbox.setText('5')
|
||
|
sld._on_editbox_changed()
|
||
|
assert_equal(sld.val, 5)
|
||
|
|
||
|
|
||
|
@testing.skipif(not has_qt, reason="Qt not installed")
|
||
|
def test_slider_float():
|
||
|
viewer = get_image_viewer()
|
||
|
sld = Slider('alpha', 2.1, 3.1, value=2.1, value_type='float',
|
||
|
orientation='vertical', update_on='move')
|
||
|
viewer.plugins[0] += sld
|
||
|
|
||
|
assert_equal(sld.val, 2.1)
|
||
|
sld.val = 2.5
|
||
|
assert_almost_equal(sld.val, 2.5, 2)
|
||
|
sld.editbox.setText('0.1')
|
||
|
sld._on_editbox_changed()
|
||
|
assert_almost_equal(sld.val, 2.5, 2)
|
||
|
|
||
|
|
||
|
@testing.skipif(True, reason="Can't automatically close window. See #3081.")
|
||
|
@testing.skipif(not has_qt, reason="Qt not installed")
|
||
|
def test_save_buttons():
|
||
|
viewer = get_image_viewer()
|
||
|
sv = SaveButtons()
|
||
|
viewer.plugins[0] += sv
|
||
|
|
||
|
import tempfile
|
||
|
fid, filename = tempfile.mkstemp(suffix='.png')
|
||
|
os.close(fid)
|
||
|
|
||
|
timer = QtCore.QTimer()
|
||
|
timer.singleShot(100, QtWidgets.QApplication.quit)
|
||
|
|
||
|
# exercise the button clicks
|
||
|
sv.save_stack.click()
|
||
|
sv.save_file.click()
|
||
|
|
||
|
# call the save functions directly
|
||
|
sv.save_to_stack()
|
||
|
sv.save_to_file(filename)
|
||
|
|
||
|
img = data.imread(filename)
|
||
|
|
||
|
assert_almost_equal(img, img_as_uint(viewer.image))
|
||
|
|
||
|
img = io.pop()
|
||
|
assert_almost_equal(img, viewer.image)
|
||
|
|
||
|
os.remove(filename)
|
||
|
|
||
|
|
||
|
@testing.skipif(not has_qt, reason="Qt not installed")
|
||
|
def test_ok_buttons():
|
||
|
viewer = get_image_viewer()
|
||
|
ok = OKCancelButtons()
|
||
|
viewer.plugins[0] += ok
|
||
|
|
||
|
ok.update_original_image(),
|
||
|
ok.close_plugin()
|