import tkinter as tk import tkinter.ttk as ttk from tkinter import simpledialog, filedialog class SliderDialogBox(simpledialog._QueryDialog): def __init__(self, *args, **kw): if "show" in kw: self.__show = kw["show"] del kw["show"] else: self.__show = None if "min" in kw: self.__min = kw["min"] del kw["min"] else: self.__min = 0 if "max" in kw: self.__max = kw["max"] del kw["max"] else: self.__max = 100 if "interval" in kw: self.__interval = kw["interval"] del kw["interval"] else: self.__interval = 1 if "init_val" in kw: self.__init_val = kw["init_val"] del kw["init_val"] else: self.__init_val = None if "hint" in kw: self.hint = kw["hint"] del kw["hint"] else: self.hint = None simpledialog._QueryDialog.__init__(self, *args, **kw) def body(self, master): self.entry = tk.Scale(master=master, from_=self.__min, to=self.__max, orient=tk.HORIZONTAL, resolution=self.__interval) if self.__init_val: self.entry.set(self.__init_val) if self.hint: hint = tk.Label(master=master, text=self.hint) hint.grid(row=0, padx=5, sticky="WE") self.entry.grid(row=1, padx=5, sticky="WE") if self.__show is not None: self.entry.configure(show=self.__show) return self.entry def getresult(self): return self.entry.get() class ComboboxDialogBox(simpledialog._QueryDialog): def __init__(self, *args, **kw): if "show" in kw: self.__show = kw["show"] del kw["show"] else: self.__show = None if "values" in kw: self.__values = kw["values"] del kw["values"] else: self.__ = None if "init_val" in kw: self.__init_val = kw["init_val"] del kw["init_val"] else: self.__init_val = None if "hint" in kw: self.hint = kw["hint"] del kw["hint"] else: self.hint = None simpledialog._QueryDialog.__init__(self, *args, **kw) def body(self, master): self.entry = ttk.Combobox(master=master, values=self.__values, state="readonly") if self.__init_val: self.entry.set(self.__init_val) if self.hint: hint = tk.Label(master=master, text=self.hint) hint.grid(row=0, padx=5, sticky="WE") self.entry.grid(row=1, padx=5, sticky="WE") if self.__show is not None: self.entry.configure(show=self.__show) return self.entry def getresult(self): return self.entry.get() class DirectoryDialgoBox(simpledialog._QueryDialog): def __init__(self, *args, **kw): if "show" in kw: self.__show = kw["show"] del kw["show"] else: self.__show = None if "mustexist" in kw: self.__mustexist = kw["mustexist"] del kw["mustexist"] else: self.__mustexist = None if "init_val" in kw: self.__init_val = kw["init_val"] del kw["init_val"] else: self.__init_val = None self.path = "" simpledialog._QueryDialog.__init__(self, *args, **kw) def body(self, master): self._pathField = tk.Entry(master, width=50) self._pathButton = tk.Button(master, text="Browse", command=lambda:self.__askDirectory()) self._pathField.grid(row=1, column=1, padx=5, sticky="WE") self._pathButton.grid(row=1, column=2, sticky="WE") return self._pathField def __askDirectory(self): self.path = filedialog.askdirectory(initialdir=self.__init_val, mustexist=self.__mustexist) self._pathField.delete(0, tk.END) self._pathField.insert(0, self.path) def getresult(self): return self._pathField.get().strip() class FileOpenDialogBox(simpledialog._QueryDialog): def __init__(self, *args, **kw): if "show" in kw: self.__show = kw["show"] del kw["show"] else: self.__show = None if "mustexist" in kw: self.__mustexist = kw["mustexist"] del kw["mustexist"] else: self.__mustexist = None if "init_val" in kw: self.__init_val = kw["init_val"] del kw["init_val"] else: self.__init_val = None if "filetypes" in kw: self.__filetypes = kw["filetypes"] del kw["filetypes"] else: self.__filetypes = None self.path = "" simpledialog._QueryDialog.__init__(self, *args, **kw) def body(self, master): self._pathField = tk.Entry(master, width=50) self._pathButton = tk.Button(master, text="Browse", command=lambda:self.__askFile()) self._pathField.grid(row=1, column=1, padx=5, sticky="WE") self._pathButton.grid(row=1, column=2, sticky="WE") return self._pathField def __askFile(self): self.path = filedialog.askopenfilename(initialdir=self.__init_val, mustexist=self.__mustexist, filetypes=self.__filetypes) self._pathField.delete(0, tk.END) self._pathField.insert(0, self.path) def getresult(self): return self._pathField.get().strip() class FileSaveDialogBox(simpledialog._QueryDialog): def __init__(self, *args, **kw): if "show" in kw: self.__show = kw["show"] del kw["show"] else: self.__show = None if "mustexist" in kw: self.__mustexist = kw["mustexist"] del kw["mustexist"] else: self.__mustexist = None if "init_val" in kw: self.__init_val = kw["init_val"] del kw["init_val"] else: self.__init_val = None if "filetypes" in kw: self.__filetypes = kw["filetypes"] del kw["filetypes"] else: self.__filetypes = None self.path = "" simpledialog._QueryDialog.__init__(self, *args, **kw) def body(self, master): self._pathField = tk.Entry(master, width=50) self._pathButton = tk.Button(master, text="Browse", command=lambda:self.__askFile()) self._pathField.grid(row=1, column=0, padx=5, sticky="WE") self._pathButton.grid(row=1, column=1, sticky="WE") return self._pathField def __askFile(self): self.path = filedialog.asksaveasfilename(initialdir=self.__init_val, mustexist=self.__mustexist, filetypes=self.__filetypes) self._pathField.delete(0, tk.END) self._pathField.insert(0, self.path) def getresult(self): return self._pathField.get().strip()