⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tksimpledialog.py

📁 minimal python variant for small footprint apps like embedded apps
💻 PY
字号:
## An Introduction to Tkinter# tkSimpleDialog.py## Copyright (c) 1997 by Fredrik Lundh## fredrik@pythonware.com# http://www.pythonware.com## --------------------------------------------------------------------# dialog base class'''Dialog boxesThis module handles dialog boxes. It contains the followingpublic symbols:Dialog -- a base class for dialogsaskinteger -- get an integer from the useraskfloat -- get a float from the useraskstring -- get a string from the user'''from Tkinter import *import osclass Dialog(Toplevel):    '''Class to open dialogs.    This class is intended as a base class for custom dialogs    '''    def __init__(self, parent, title = None):        '''Initialize a dialog.        Arguments:            parent -- a parent window (the application window)            title -- the dialog title        '''        Toplevel.__init__(self, parent)        self.transient(parent)        if title:            self.title(title)        self.parent = parent        self.result = None        body = Frame(self)        self.initial_focus = self.body(body)        body.pack(padx=5, pady=5)        self.buttonbox()        self.grab_set()        if not self.initial_focus:            self.initial_focus = self        self.protocol("WM_DELETE_WINDOW", self.cancel)        self.geometry("+%d+%d" % (parent.winfo_rootx()+50,                                  parent.winfo_rooty()+50))        self.initial_focus.focus_set()        self.wait_window(self)    def destroy(self):        '''Destroy the window'''        self.initial_focus = None        Toplevel.destroy(self)    #    # construction hooks    def body(self, master):        '''create dialog body.        return widget that should have initial focus.         This method should be overridden, and is called        by the __init__ method.        '''        pass    def buttonbox(self):        '''add standard button box.         override if you don't want the standard buttons        '''                box = Frame(self)        w = Button(box, text="OK", width=10, command=self.ok, default=ACTIVE)        w.pack(side=LEFT, padx=5, pady=5)        w = Button(box, text="Cancel", width=10, command=self.cancel)        w.pack(side=LEFT, padx=5, pady=5)        self.bind("<Return>", self.ok)        self.bind("<Escape>", self.cancel)        box.pack()    #    # standard button semantics    def ok(self, event=None):        if not self.validate():            self.initial_focus.focus_set() # put focus back            return        self.withdraw()        self.update_idletasks()        self.apply()        self.cancel()    def cancel(self, event=None):        # put focus back to the parent window        self.parent.focus_set()        self.destroy()    #    # command hooks    def validate(self):        '''validate the data        This method is called automatically to validate the data before the         dialog is destroyed. By default, it always validates OK.        '''        return 1 # override    def apply(self):        '''process the data        This method is called automatically to process the data, *after*        the dialog is destroyed. By default, it does nothing.        '''        pass # override# --------------------------------------------------------------------# convenience dialoguesimport stringclass _QueryDialog(Dialog):    def __init__(self, title, prompt,                 initialvalue=None,                 minvalue = None, maxvalue = None,                 parent = None):        if not parent:            import Tkinter            parent = Tkinter._default_root        self.prompt   = prompt        self.minvalue = minvalue        self.maxvalue = maxvalue        self.initialvalue = initialvalue        Dialog.__init__(self, parent, title)    def destroy(self):        self.entry = None        Dialog.destroy(self)    def body(self, master):        w = Label(master, text=self.prompt, justify=LEFT)        w.grid(row=0, padx=5, sticky=W)        self.entry = Entry(master, name="entry")        self.entry.grid(row=1, padx=5, sticky=W+E)        if self.initialvalue:            self.entry.insert(0, self.initialvalue)            self.entry.select_range(0, END)        return self.entry    def validate(self):        import tkMessageBox        try:            result = self.getresult()        except ValueError:            tkMessageBox.showwarning(                "Illegal value",                self.errormessage + "\nPlease try again",                parent = self            )            return 0        if self.minvalue is not None and result < self.minvalue:            tkMessageBox.showwarning(                "Too small",                "The allowed minimum value is %s. "                "Please try again." % self.minvalue,                parent = self            )            return 0        if self.maxvalue is not None and result > self.maxvalue:            tkMessageBox.showwarning(                "Too large",                "The allowed maximum value is %s. "                "Please try again." % self.maxvalue,                parent = self            )            return 0                        self.result = result        return 1class _QueryInteger(_QueryDialog):    errormessage = "Not an integer."    def getresult(self):        return string.atoi(self.entry.get())def askinteger(title, prompt, **kw):    '''get an integer from the user    Arguments:        title -- the dialog title        prompt -- the label text        **kw -- see SimpleDialog class    Return value is an integer    '''    d = apply(_QueryInteger, (title, prompt), kw)    return d.resultclass _QueryFloat(_QueryDialog):    errormessage = "Not a floating point value."    def getresult(self):        return string.atof(self.entry.get())def askfloat(title, prompt, **kw):    '''get a float from the user    Arguments:        title -- the dialog title        prompt -- the label text        **kw -- see SimpleDialog class    Return value is a float    '''    d = apply(_QueryFloat, (title, prompt), kw)    return d.resultclass _QueryString(_QueryDialog):    def getresult(self):        return self.entry.get()def askstring(title, prompt, **kw):    '''get a string from the user    Arguments:        title -- the dialog title        prompt -- the label text        **kw -- see SimpleDialog class    Return value is a string    '''    d = apply(_QueryString, (title, prompt), kw)    return d.resultif __name__ == "__main__":     root = Tk()    root.update()    print askinteger("Spam", "Egg count", initialvalue=12*12)    print askfloat("Spam", "Egg weight\n(in tons)", minvalue=1, maxvalue=100)    print askstring("Spam", "Egg label")

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -