All pastes #1196404 Raw Edit

Something

public text v1 · immutable
#1196404 ·published 2008-09-07 13:25 UTC
rendered paste body
from libtovid.netagui import Style
import sys, os

class ConfirmDialog(AppDialog):
    """A generic dialog class that allows you to make a dialog with single or
    multiple buttons, and a choice of text or image (GIF only).  Providing
    text AND image makes a 2nd text label underneath the image label.  Example:

    from Tkinter import Tk
    from libtovid.appdialogs import ConfirmDialog

    btns='Preview OK ?, No'
    root = Tk()
    a = ConfirmDialog(root, 'Dialog', 'Menu Preview', btns, '/home/me/pv.gif')
    a.run()

    The exit codes of the buttons start at 0 and increment
    """
    def __init__(self, parent, title='', text='', button_text='', image=''):
        AppDialog.__init__(self,parent)

        self.parent = parent
        self.text = text
        self._title = title
        default_button_text = ['OK']
        if button_text:
            self.button_text =  []
            if type(button_text) == str:
                self.button_text.append(button_text)
            else:
                self.button_text.extend(button_text)
        else:
            self.button_text = default_button_text
        self.image = image

        # get metagui font configuration
        self.inifile = os.path.expanduser('~/.metagui/config')
        self.style = Style()
        self.style.load(self.inifile)
        # draw the title
        self.parent.title(self._title)

        # draw the text and/or image
        if self.image:
            self.label1 = Label(parent, bd=2, relief='groove')
            self.label1.pack(padx=20, pady=20, side='top')
            if self.text:
                label2 = Label(self.parent, text=self.text, font=self.lrg_font, \
                justify='left', padx=20, pady=20)
                label2.pack(side='top', fill='both', expand=1)
        elif self.text:
            label2 = Label(self.parent, text=self.text, font=self.style.font, \
            justify='left', padx=20, pady=20)
            label2.pack(side='top', fill='both', expand=1)

        # draw the button(s) in a frame
        frame = Frame(self.parent)
        buttons = []
        for index, item in enumerate(self.button_text):
            button = Button(frame, text=item, relief='groove', overrelief='raised', \
            anchor='s', command=lambda index=index:self.exit_with_status(index), \
            #anchor='s', command=lambda index=index:sys.exit(index), \
            font=self.style.font)
            button.pack(side='left')
        frame.pack(side='bottom')

    def exit_with_status(self, status):
        print status
        self.parent.destroy()

    def set_image(self):
        img = PhotoImage(file=self.image)
        self.im = img
        self.label1.config(image=self.im)

    def run(self):
        if self.image:
            self.set_image()
        self.mainloop()