54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
from .util import prepare_for_display, window_manager, GuiLockError
|
|
|
|
try:
|
|
# we try to acquire the gui lock first
|
|
# or else the gui import might trample another
|
|
# gui's pyos_inputhook.
|
|
window_manager.acquire('gtk')
|
|
except GuiLockError as gle:
|
|
print(gle)
|
|
else:
|
|
try:
|
|
import gtk
|
|
except ImportError:
|
|
print('pygtk libraries not installed.')
|
|
print('plugin not loaded.')
|
|
window_manager._release('gtk')
|
|
else:
|
|
|
|
class ImageWindow(gtk.Window):
|
|
def __init__(self, arr, mgr):
|
|
gtk.Window.__init__(self)
|
|
self.mgr = mgr
|
|
self.mgr.add_window(self)
|
|
|
|
self.connect("destroy", self.destroy)
|
|
|
|
width = arr.shape[1]
|
|
height = arr.shape[0]
|
|
rstride = arr.strides[0]
|
|
pb = gtk.gdk.pixbuf_new_from_data(arr.data,
|
|
gtk.gdk.COLORSPACE_RGB,
|
|
False, 8, width, height,
|
|
rstride)
|
|
self.img = gtk.Image()
|
|
self.img.set_from_pixbuf(pb)
|
|
|
|
self.add(self.img)
|
|
self.img.show()
|
|
|
|
def destroy(self, widget, data=None):
|
|
self.mgr.remove_window(self)
|
|
|
|
def imshow(arr):
|
|
arr = prepare_for_display(arr)
|
|
|
|
iw = ImageWindow(arr, window_manager)
|
|
iw.show()
|
|
|
|
def _app_show():
|
|
if window_manager.has_windows():
|
|
window_manager.register_callback(gtk.main_quit)
|
|
gtk.main()
|
|
else:
|
|
print('no images to display')
|