2021년 2월 7일 일요일

[IronPython] WPF Image Viewer

WPF Image Viewer

import zip
import wpf
import wpf_icon as icon

global app, index, img, zf, ix, mx, ls

def setMenuBar():
    app.add_ezmenubar(
         [[ 'File', 'Exit', on_exit, icon.GetExitImage() ],
          [ 'Help', 'About', on_about ]]        
    )

def setStatusBar():
    global index, prevImg, nextImg
    index = wpf.WpfChoice(handler = on_index, width=64)
    prevImg = wpf.WpfButton(text="<", handler = on_prev, width=32)
    nextImg = wpf.WpfButton(text=">", handler = on_next, width=32)
    app.set_ezstatusbar( [ index, prevImg, nextImg ] )

def setContent():
    global img
    img = wpf.WpfImage(imagefile='D:/Lenna.png', stretch='uniformfill')
    img.set_filedrop(on_drop)
    hbox = [[ img ]]
    app.set_ezcontent( [[ hbox, 0 ]] ) 

def on_about(sender,event):
    wpf.WpfAlertDialog("About ImageViewer", "Information" )
        
def on_exit(sender,event):
    app.Close()

def new_page(page):
    global index, img, zf, ix, ls
    ix = page
    index.set_selected_index(ix)
    img.set_image(wpf.GetImageSource(wpf.ByteArray(zf.read(ls[ix]))))
    img.scroll_top()
    
def on_drop(files):
    global index, zf, mx, ls
    app.set_title(files[0])
    zf = zip.PyUnZip(files[0])
    ls = zf.list()
    mx = len(ls)
    for i in range(mx): index.add_item(str(i))
    new_page(0)

def on_index(sender,event):
    new_page( index.get_selected_index() )
    
def on_prev(sender,event):
    if ix > 0: new_page(ix - 1)

def on_next(sender,event):
    if ix < mx-1: new_page(ix + 1)

if __name__ == "__main__":    
    app = wpf.Win("Image Viewer 0.1",320,240)
    app.set_icon(icon.GetExitImageSource())
    setMenuBar()
    setContent()
    setStatusBar()
    app.run()    

댓글 없음:

댓글 쓰기