import os import tkinter import ascii import threading help_file = """The file or URL to ASCII. If you only put a name, it must be in the same folder as this program. Otherwise, include a file path. """ help_resolution = """The characterpixel resolution. Each ASCII character will represent x•y pixels of the original image. Lower numbers produce higher detail. """ help_contrast = """The character smoothing. At 1, the image may use all 95 characters. At 2, the image may use every other character At 3, every third character, etc. Higher numbers produce flatter images.""" help_table = """The table of ASCII characters. Full = all 95 characters Min = 41 characters Min may produce cleaner images from photos Lower Smoothing to accommodate""" help_blank = "\n\n\n\n" class Ascii: def ticker(self, status): self.label_ticker.config(text=status) def startthread(self): self.processthread = threading.Thread(name="Ascii converter", target=self.start) self.processthread.daemon=True self.processthread.start() def start(self): self.enter_file.configure(bg="#fff") self.enter_file.configure(fg="#000") self.enter_resolution_x.configure(bg="#fff") self.enter_resolution_y.configure(bg="#fff") self.enter_contrast.configure(bg="#fff") filename = self.enter_file.get() xvalue = int(self.enter_resolution_x.get()) yvalue = int(self.enter_resolution_y.get()) contrast = int(self.enter_contrast.get()) tickfunction = self.ticker try: ascii.ascii(filename, xvalue, yvalue, contrast, tickfunction, self.asciitable) except FileNotFoundError: self.enter_file.configure(bg="#f00") self.enter_file.configure(fg="#fff") if 'http' in filename and '/' in filename: filename = filename.split('/')[-1] self.enter_file.delete(0, 'end') self.enter_file.insert(0, filename) def generatehelp(self, helptype, label): def showhelp(self): label.configure(text=helptype) return showhelp def toggletable(self): if self.asciitable == ascii.asciitable: self.asciitable = ascii.asciitable_min self.button_asciitable.configure(text="Min") else: self.asciitable = ascii.asciitable self.button_asciitable.configure(text="Full") def clear(self): self.enter_file.configure(bg="#fff") self.enter_file.configure(fg="#000") self.enter_file.delete(0, 'end') self.enter_resolution_x.delete(0, 'end') self.enter_resolution_x.insert(0, '8') self.enter_resolution_y.delete(0, 'end') self.enter_resolution_y.insert(0, '17') self.enter_contrast.delete(0, 'end') self.enter_contrast.insert(0, '8') self.asciitable = ascii.asciitable self.button_asciitable.configure(text="Full") self.label_ticker.config(text="0.00") def __init__(self): self.t = tkinter.Tk() self.t.wm_title("ASCII") self.w = 400 self.h = 275 self.asciitable = ascii.asciitable self.centerframe = tkinter.Frame(self.t, width=self.w, height=self.h) self.centerframe.pack_propagate(0) self.centerframe.pack(expand=True) self.label_help = tkinter.Label(self.centerframe, text=help_blank) self.label_file = tkinter.Label(self.centerframe, text="File:") self.label_file.help = self.generatehelp(help_file, self.label_help) self.label_resolution = tkinter.Label(self.centerframe, text="Resolution:") self.label_resolution.help = self.generatehelp(help_resolution, self.label_help) self.label_contrast = tkinter.Label(self.centerframe, text="Smoothing:") self.label_contrast.help = self.generatehelp(help_contrast, self.label_help) self.label_ticker = tkinter.Label(self.centerframe, text="0.00") self.label_table = tkinter.Label(self.centerframe, text="Table: ") self.label_table.help = self.generatehelp(help_table, self.label_help) self.centerframe.help = self.generatehelp(help_blank, self.label_help) self.label_file.bind("", self.label_file.help) self.label_resolution.bind("", self.label_resolution.help) self.label_contrast.bind("", self.label_contrast.help) self.centerframe.bind("", self.centerframe.help) self.label_table.bind("", self.label_table.help) self.enter_file = tkinter.Entry(self.centerframe, width=30) self.enter_resolution_x = tkinter.Spinbox(self.centerframe, from_=1, to=9999, width=5) self.enter_resolution_y = tkinter.Spinbox(self.centerframe, from_=1, to=9999, width=5) self.enter_resolution_x.delete(0, 'end') self.enter_resolution_y.delete(0, 'end') self.enter_resolution_x.insert(0, 8) self.enter_resolution_y.insert(0, 17) self.enter_contrast = tkinter.Spinbox(self.centerframe, from_=1, to=95, width=2) self.enter_contrast.delete(0, 'end') self.enter_contrast.insert(0, 8) self.button_start = tkinter.Button(self.centerframe, text="Go", command= self.startthread) self.button_start.configure(bg="#76E22E", activebackground="#46E22E", relief="flat", width=15) self.button_clear = tkinter.Button(self.centerframe, text="clear", command= self.clear) self.button_clear.configure(bg="#e23939", activebackground="#b82e2e", relief="flat", width=4) self.button_asciitable = tkinter.Button(self.centerframe, text="Full", command=self.toggletable) self.button_asciitable.configure(bg="#6fd5f6", activebackground="#6fd5f6", relief="flat", width=4) self.label_file.grid(row=0, column=0, sticky="e") self.enter_file.grid(row=0, column=1, sticky="w", columnspan=88) self.enter_file.focus_set() self.label_resolution.grid(row=1, column=0, sticky="e") self.enter_resolution_x.grid(row=1, column=1, sticky="w") self.enter_resolution_y.grid(row=1, column=2, sticky="w") self.label_contrast.grid(row=2, column=0, sticky="e") self.enter_contrast.grid(row=2, column=1, sticky="w") self.label_table.grid(row=3, column=0, sticky="e") self.button_asciitable.grid(row=3, column=1, sticky="w") self.label_ticker.grid(row=4, column=0, columnspan=88) self.button_start.grid(row=5, column=0, columnspan=88) self.button_clear.grid(row=5, column=87) self.label_help.grid(row=6, column=0, columnspan=88) self.screenwidth = self.t.winfo_screenwidth() self.screenheight = self.t.winfo_screenheight() self.windowwidth = self.w self.windowheight = self.h self.windowx = (self.screenwidth-self.windowwidth) / 2 self.windowy = ((self.screenheight-self.windowheight) / 2) - 27 self.geometrystring = '%dx%d+%d+%d' % (self.windowwidth, self.windowheight, self.windowx, self.windowy) self.t.geometry(self.geometrystring) self.t.mainloop() asciigui = Ascii()