コード例 #1
0
class ConvProgress:

    window = None
    parent = None
    callback = None
    icon = None

    def __init__(self, parent, callback, icon):
        self.parent = parent
        self.callback = callback
        self.icon = icon

        self.window = Tkinter.Toplevel(parent)
        self.window.withdraw()
        self.window.title('Translation progress')
        self.window.transient(parent)
        self.window.group(parent)
        self.window.protocol('WM_DELETE_WINDOW', self.stub)
        self.window.tk.call('wm', 'iconbitmap', self.window, self.icon)

        self.win_panel = TFrame(self.window, borderwidth=10)
        self.win_panel.pack(side=TOP, fill=BOTH)

        top_panel = TFrame(self.win_panel)
        top_panel.pack(side=TOP, fill=X, pady=5)
        self.label1_reference = StringVar(self.window)
        self.label1 = TLabel(top_panel, textvariable=self.label1_reference)
        self.label1.pack(side=LEFT)
        self.label1_reference.set('Start...')

        mid_panel = TFrame(self.win_panel)
        mid_panel.pack(side=TOP, fill=X)
        self.label2_reference = StringVar(self.window)
        self.label2 = TLabel(mid_panel, textvariable=self.label2_reference)
        self.label2.pack(side=LEFT)
        self.label2_reference.set('')

        self.progress_reference = IntVar(self.window)
        self.progress_bar = Ttk.TProgressbar(self.win_panel,
                                             orient='horizontal',
                                             length=450,
                                             variable=self.progress_reference)
        self.progress_bar.pack(side=TOP, anchor='w')
        self.progress_reference.set(10)

        self.window.resizable(False, False)
        self.set_position()
        self.window.deiconify()

    def msg_receiver(self, msg1, msg2, val=0, mode='determinate'):
        self.label1_reference.set(msg1)
        self.label2_reference.set(msg2)
        self.progress_reference.set(val)
        self.window.update()

    def run_dialog(self, *args):
        self.window.grab_set()
        self.callback()
        self.close()

    def set_position(self):
        self.window.update()
        width = self.win_panel.winfo_reqwidth()
        height = self.win_panel.winfo_reqheight()
        posx = self.window.winfo_screenwidth() / 2 - width / 2
        posy = self.window.winfo_screenheight() / 2 - height / 2
        self.window.geometry('%dx%d%+d%+d' % (width, height, posx, posy))

    def close(self):
        self.parent.grab_set()
        self.window.destroy()

    def stub(self):
        pass