class Scratchpad: def __init__(self): self.window = Tk() self.window.title("Onager Scratchpad") self.create_frame() self.create_editing_window() self.window.bind('<F7>', self.save_file) self.window.bind('<F5>', self.open_file) def create_frame(self): frame_style = Style() frame_style.theme_use('alt') frame_style.configure("TFrame", relief='raised') self.frame = Frame(self.window, style="frame_style.TFrame") self.frame.rowconfigure(1) self.frame.columnconfigure(1) self.frame.grid(row=0, column=0) def create_editing_window(self): self.editing_window = ScrolledText(self.frame) self.editing_window.configure(fg='gold', bg='blue', font='serif 12', padx='15', pady='15', wrap='word', borderwidth='10', relief='sunken', tabs='48', insertbackground='cyan') self.editing_window.grid(row=0, column=0) def save_file(self, event=None): name = asksaveasfilename() outfile = open(name, 'w') contents = self.editing_window.get(0.0, END) outfile.write(contents) outfile.close() def open_file(self, event=None): name = askopenfilename() infile = open(name, 'r') contents = infile.read() self.editing_window.insert(INSERT, contents) infile.close()
def __init__(self, client, *args, **kwargs): ## Set up window super().__init__(*args, **kwargs) self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) self.title() # Menus self.option_add('*tearOff', False) self['menu'] = menus.menubar(self) # Output output = ScrolledText(self, wrap='word', state='disabled') output.grid(column=0, row=0, sticky='nwes') # Input input = tk.Text(self, height=1, wrap='word') input.grid(column=0, row=1, sticky='nwes') # Tabbar # Final setup input.focus() self.client = client self.output = output self.input = input self.mainloop()
class mainWindow(tk.Frame): def __init__(self): self.root = tk.Tk() self.root.title("segmentationGui.py") self.frame = tk.Frame(self.root, width=700, height=700) self.frame.grid(row=1) self.notebook = ttk.Notebook(self.frame) self.edgeTab = edgeDetectFrame(self.notebook) self.kMeansTab = kMeansSegmentationFrame(self.notebook) self.nCutTab = normalizedCutsFrame(self.notebook) self.notebook.add(self.edgeTab, text = "Edge Detection",compound=tk.TOP) self.notebook.add(self.kMeansTab, text = "k-Means") self.notebook.add(self.nCutTab, text = "Normalized Cuts") self.notebook.grid(row=1) self.log = ScrolledText(self.frame, wrap='word') self.log.grid(row=2) sys.stdout = LogRedirector(self.log) sys.stderr = LogRedirector(self.log) tk.mainloop()
def post(author_id): postWin = Toplevel(root) postWin.title('** Post **') postWin.geometry('800x600') cursor.execute('Select display_name from blog_author where login_id= %s', author_id) authorDisplayName = cursor.fetchone()[0] Label(postWin, text=authorDisplayName, font='Times 40 bold').grid(row=0, column=1) date = datetime.datetime.now() post_date = str(date.year)+'-'+str(date.month)+'-'+str(date.day)+' '+str(date.hour)+':'+str(date.minute)+':'+str(date.second) ttk.Label(postWin, text='Title : ', font='Times 10 bold').grid(row=1, column=0, columnspan=1) title = ttk.Entry(postWin, width=50) title.grid(row=1, column=1, columnspan=3) ttk.Label(postWin, text='Write your Post here :', font='Times 10 bold').grid(row=2) post = ScrolledText(postWin) post.grid(row=3, column=1) commentEnabled = IntVar() ttk.Checkbutton(postWin, text='Comment Enabled', variable=commentEnabled ).grid(row=4, column=0) def write(): try: cursor.execute('Insert into blog_post(title,article,date_published,comment_enabled,blog_author_login_id,stars) Values(%s,%s,%s,%s,%s,%s)', (title.get(), post.get(1.0, 'end-1c'), post_date, commentEnabled.get(), author_id, '0')) db.commit() msg = 'Post Successful' except ValueError: msg = 'Attempt Failed' ttk.Label(postWin, text=msg).grid(row=5, column=1) ttk.Button(postWin, text='Post', command=write).grid(row=4, column=1)
class MainMenu(): def __init__(self, master): self.master = master self.output_file_name = StringVar() master.title('Validate Reservation Sheet') #print(master.configure().keys()) #Label(master, text='\nOutput', fg='black', font='none 12 bold').grid(row=0, column=0, sticky = W) #self.output_file_name. = 'Output' Label(master, textvariable=self.output_file_name, fg='black', font='none 12 bold').grid(row=0, column=0, sticky=W) self.output = ScrolledText(master, width=120, height=40, wrap=WORD, background='white') self.output.grid(row=1, column=0, columnspan=2, sticky='W') land_btn = Button(master, text="Lands", command=self.validate_land_sheet).grid(row=0, column=2) unit_btn = Button(master, text="Units", command=self.val_unit).grid(row=0, column=3) exit_btn = Button(master, text="Exit ", command=master.quit).grid(row=0, column=4, sticky=W) def validate_land_sheet(self): self.output.delete(0.0, END) # clear window file_path = self.select_file_path() self.output_file_name.set('Results of file name: ' + file_path) if file_path.split('.')[-1].lower() == 'xlsx': val_land = ValidateLandSheet(file_path) val_land.output_win = self.output val_land.check_land_sheet() elif file_path.split('.')[-1].lower() == 'csv': val_land = ValidateLandCSV(file_path) val_land.output_win = self.output val_land.check_land_sheet() def select_file_path(self): try: file_path = get_file_path(initialDir=".", DialogTitle="select excel/csv sheet", fileTypeText="excel, csv", fileType="*.xlsx;*.csv") except: print('No file selected ...') return '' else: return file_path def val_unit(self): pass
def detailTodo(cb=None): tanggal = str(cal.selection_get()) win = tk.Toplevel() win.wm_title("Detail todo") selectedItem = treev.focus() selectedIndex = treev.item(selectedItem)["text"] selectedTodo = todos[tanggal][selectedIndex] judul = tk.StringVar(value=selectedTodo["judul"]) tk.Label(win, text="Tanggal\t :").grid(row=0, column=0, sticky="W") tk.Label(win, text=(f"{tanggal} | {selectedTodo['waktu']}")).grid(row=0, column=1, sticky="W") tk.Label(win, text="Judul\t :").grid(row=1, column=0, columnspan=3, sticky="W") tk.Entry(win, state="disabled", textvariable=judul).grid(row=1, column=1, sticky="W") tk.Label(win, text="Keterangan:").grid(row=2, column=0, columnspan=5, rowspan=4, sticky="W") keterangan = ScrolledText(win, width=12, height=5) keterangan.grid(row=2, column=1, sticky="E") keterangan.insert(tk.INSERT, selectedTodo["keterangan"]) keterangan.configure(state="disabled", width=13)
def show_message(self): history_msg_win = Toplevel() history_msg_win.title('{}的历史消息记录'.format(self.username)) history_msg_win.geometry('550x500+500+100') msglist = ScrolledText(master=history_msg_win, width=65, height=28) msglist.grid(row=0, column=0, padx=2, pady=5) con = sqlite3.connect('message.db') try: result = con.execute("select * from {}".format(self.username + '_tb')) for c in result: sender = c[0] message = c[2] msg_time = c[3] if sender != self.username: msg = msg_time + sender + '对我' + '说:' + '\n ' else: msg = msg_time + '我对' + sender + '说:' + '\n ' msglist.insert(END, msg, 'green') msglist.insert(END, message) con.commit() con.close() except: pass
def __init__(self, parent, controller): super().__init__(parent) self.parent, self.controller = parent, controller with open('instructions/training_instructions.txt', 'r') as f: data = f.read() self.controller.bind('<Return>', self.proceed_to_training) ttk.Label(self, text="Training instructions").grid() training_instructions = ScrolledText(self, borderwidth=10, font="Helvetica", width=40, wrap=tk.WORD) training_instructions.insert(tk.END, data) training_instructions.grid() replay_button = ttk.Button( self, text="Replay instructions", command=lambda: play_audio("instructions_audio_files/", "directions_training.wav")) self.ready_button = ttk.Button(self, text='Ready', command=self.controller.start_training, state='disabled') self.ready_button.grid() self.controller.after(500, self.play_training_instructions)
class Remove(Screen): def __init__(self): tk.Frame.__init__(self) self.lbl_removal1 = tk.Label(self, text="These titles are ", font=("Times", "35")) self.lbl_removal1.grid(row=0, column=1, columnspan=2) self.lbl_removal2 = tk.Label(self, text="marked for removal!", font=("Times", "35")) self.lbl_removal2.grid(row=1, column=1, columnspan=2) self.scr_removelist = ScrolledText(self, height=8, width=40) self.scr_removelist.grid(row=2, column=1, columnspan=2) self.btn_cancel = tk.Button(self, text="Cancel", command=Screen.main, font=("Times", "25")) self.btn_cancel.grid(row=3, column=1) self.btn_conf = tk.Button(self, text="Confirm", font=("Times", "25")) self.btn_conf.grid(row=3, column=2, sticky="w") self.grid_columnconfigure(0, weight=1) self.grid_columnconfigure(3, weight=1)
class GUI(Encryptor): __encrpytType = " " def pushString(self, typeEn): print(typeEn) x = super().__init__('s', typeEn, self.dataInput.get(index1=1.0, index2=END)) self.dataInput.delete('1.0', END) self.dataInput.insert(INSERT, self.standardInput()) def __init__(self): self.root = Tk() self.text = Label(self.root, text="Enter text: ") self.dataInput = ScrolledText(self.root) #self.temp = self.dataInput.get(index1=1.0, index2=END) self.execButton = Button(self.root, text="Encrypt", command=lambda: self.pushString("En") #background = "green" ) self.execButton1 = Button(self.root, text="Decrypt", command=lambda: self.pushString("De") #background = "green" ) self.text.grid(row=0, column=0, pady=10, padx=10) self.dataInput.grid(row=1, column=1, columnspan=10, pady=10, padx=10) self.execButton.grid(row=3, column=8, pady=10, padx=10) self.execButton1.grid(row=3, column=9, pady=10, padx=10) self.root.mainloop()
def display(): try: e2.delete(0,END) e4.delete(0,END) fi=filename.get() if e3.get()=='': text=ScrolledText(dg) text.grid(row=4,column=0) with open(fi) as f: text.delete('1.0', END) text.insert("1.0",f.read()) else: with open(fi) as f: a=f.read() t=a.find("'"+str(e3.get())+"'") if t!=-1: n=a[t:].find('Name')+t r=a[t:].find('Rollno')+t p=a[t:].find('Percentage')+t s=a[t:].find('Gender')+t g=a[t:].find('Courses')+t e2.insert('0',a[n+8:r-4]) e4.insert('0',a[p+14:s-4]) la1=Label(frame3,text=('Gender={}'.format(a[s:g-4]))) la1.grid(row=0,column=0,sticky='ew') else: messagebox.showinfo('showinfo','No result found') except: messagebox.showinfo('showinfo','No result found') return
class MainUI(Frame): def __init__(self, master=None): Frame.__init__(self, master, width=600, height=480) self.data_directory = StringVar() self.data_directory.set("no data selected... please select directory of google_speech_data") self.directory_prompt = Label(self, textvariable = self.data_directory) self.directory_prompt.grid(row=0,column=0,sticky=W) self.select_dir = Button(self, text ="Change directory") self.select_dir.grid(row=0,column=1) self.select_dir.bind("<Button-1>",self.chdir) self.gru_label = Label(self, text = "GRU Size:") self.gru_label.grid(row=1,column=0,sticky=E) self.gru_entry = Entry(self) self.gru_entry.insert(0,"20") self.gru_entry.grid(row=1,column=1) self.words_label = Label(self,text = "Words to learns: (one line per word)") self.words_label.grid(row=2,column=0,sticky=W) self.words = ScrolledText(self) self.words.grid(row=3,column=0,columnspan=2) self.trainbtn = Button(self, text ="Train model") self.trainbtn.bind("<Button-1>",self.train) self.trainbtn.grid(row=4,column=1) self.pack(side=LEFT) def chdir(self, event): self.speech_data = filedialog.askdirectory() if self.speech_data: self.data_directory.set("Using speech data from: "+self.speech_data) os.chdir(self.speech_data) def train(self, event): filename = filedialog.asksaveasfilename(title = "Select file to checkpoint the model to",filetypes =(("uspeech model checkpoint","*.model"),)) if filename: pass #TODO Implement training routine
class stdoutWindow(tkinter.Toplevel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.title("Deploy Progress") self.stdoutText = ScrolledText(self, width=60, height=15) self.stdoutText.grid(row=0, column=0)
def editContactView(self, infoWindow, Contact): window = Toplevel() window.focus_set() window.title("Edit Contact") window.resizable(width=FALSE, height=FALSE) Label(window, text="Name ").grid(row=0, column=0) name = Entry(window, width=30) name.grid(row=0, column=1) name.insert(0, Contact["name"]) Label(window, text="Line ").grid(row=1, column=0) line = Entry(window, width=30) line.grid(row=1, column=1) line.insert(0, Contact["line"]) Label(window, text="Email ").grid(row=2, column=0) Email = Entry(window, width=30) Email.grid(row=2, column=1) Email.insert(0, Contact["Email"]) Label(window, text="Phone ").grid(row=3, column=0) telephone = ScrolledText(window, width=37) telephone.grid(row=3, column=1) for i in Contact["telephone"]: telephone.insert(INSERT, str(i) + "\n") okButton = Button(window, text="Finish", command=lambda: self.editContact(window, infoWindow, uuid=Contact["uuid"], name=name.get(), line=line.get(), Email=Email.get(), Telephone=telephone.get(1.0, END))) okButton.grid(row=4) cancelButton = Button(window, text="Cancel", command=window.destroy) cancelButton.grid(row=4, column=1, sticky=E)
class LongTextbox(Textbox): def config(self, **kwargs): if 'height' in kwargs: self.sentry.config(height=kwargs['height']) if 'width' in kwargs: self.sentry.config(width=kwargs['width']) if 'text' in kwargs: self.sentry.insert(END, kwargs['text']) if 'lang' in kwargs: self.lang = kwargs['lang'] self.label.config(text=self.lang[self.text]) def place(self, **kwargs): self.parent = kwargs['parent'] self.row = kwargs['row'] self.column = kwargs['column'] self.label = Label(self.parent, text=self.lang[self.text]) self.sentry = ScrolledText(self.parent, relief=SOLID) self.label.grid(row=self.row, column=self.column) self.sentry.grid(row=self.row, column=self.column+1, sticky=E) def getData(self): return self.sentry.get('1.0', END + '-1c') def setData(self, data): self.sentry.delete('1.0', END) self.config(text=data)
def addContactView(self): window = Toplevel() window.focus_set() window.title("Add Contact") window.resizable(width=FALSE, height=FALSE) Label(window, text="Name ").grid(row=0, column=0) name = Entry(window, width=30) name.grid(row=0, column=1) Label(window, text="Line ").grid(row=1, column=0) line = Entry(window, width=30) line.grid(row=1, column=1) Label(window, text="Email ").grid(row=2, column=0) Email = Entry(window, width=30) Email.grid(row=2, column=1) Label(window, text="Phone ").grid(row=3, column=0) phone = ScrolledText(window, width=37) phone.grid(row=3, column=1) okButton = Button(window, text="Finish", command=lambda: self.addContact(window, name=name.get(), line=line.get(), Email=Email.get(), Telephone=phone.get(1.0, END))) okButton.grid(row=4) cancelButton = Button(window, text="Cancel", command=window.destroy) cancelButton.grid(row=4, column=1, sticky=E)
def main(): top = Tk() labelUsername = Label(top, text="Username") labelUsername.grid(row=0, column=0, padx=(10, 20), pady=(10, 10)) entryUsername = Entry(top, width=30) entryUsername.grid(row=0, column=1, padx=(0, 10)) labelPassword = Label(top, text="Password") entryPassword = Entry(top, width=30, show="*") labelPassword.grid(row=1, column=0, padx=(10, 20), pady=(10, 10)) entryPassword.grid(row=1, column=1, padx=(0, 10)) labelMatkul = Label( top, text="Matkul : Kelas\ncontoh:\nTKIT16022:A,\nTKIT16023:B") labelMatkul.grid(row=2, column=0, padx=(10, 20), pady=(10, 10)) entryMatkul = ScrolledText(top, width=20, height=10) entryMatkul.grid(row=2, column=1, padx=(0, 10), pady=(10, 10)) loginBtn = Button( top, text="Start KRS", command=lambda: KRSAN(entryUsername.get(), entryPassword.get(), getMatkulKelas(entryMatkul.get("1.0", END)))) loginBtn.grid(row=3, columnspan=2, sticky="nsew", padx=(10, 10), pady=(10, 10)) top.mainloop()
def AddForm(): win = tk.Toplevel() win.wm_title("+") jam = tk.IntVar(value=10) menit = tk.IntVar(value=30) judul = tk.StringVar(value="") tk.Label(win, text="Waktu\t :").grid(row=0, column=0, sticky='W') tk.Spinbox(win, from_=0, to=23, textvariable=jam, width=2).grid(row=0, column=1, sticky="W") tk.Spinbox(win, from_=0, to=59, textvariable=menit, width=2).grid(row=0, column=1, sticky="E") tk.Label(win, text="Judul\t :").grid(row=1, column=0, sticky='W') tk.Entry(win, textvariable=judul).grid(row=1, column=1, columnspan=3) tk.Label(win, text="Keterangan:").grid(row=2, column=0, sticky='W') keterangan = ScrolledText( win, width=13, height=5, ) keterangan.grid(row=2, column=1, columnspan=5, rowspan=4) tanggal = str(cal.selection_get()) tk.Button( win, text="Tambah", command=lambda: addTodo(win, tanggal, jam, menit, judul, keterangan), width=7).grid(row=6, column=1, sticky='S') tk.Button(win, text="Batal", command=win.destroy, width=7).grid(row=6, column=2, sticky='SE')
def display(): try: e2.delete(0, END) e4.delete(0, END) fi = filename.get() if e3.get() == '': text = ScrolledText(dg) text.grid(row=4, column=0) with open(fi) as f: text.delete('1.0', END) text.insert("1.0", f.read()) else: with open(fi) as f: a = f.read() t = a.find("'" + str(e3.get()) + "'") if t != -1: n = a[t:].find('Name') + t r = a[t:].find('Rollno') + t p = a[t:].find('Percentage') + t s = a[t:].find(')]]') + t e2.insert('0', a[n + 8:r - 6]) e4.insert('0', a[p + 14:s - 1]) else: messagebox.showinfo('showinfo', 'No result found') except: messagebox.showinfo('showinfo', 'No result found 1') return
def render_create_view(): clear_view() Label(tk, text="Enter your task's name:").grid(column=0, row=0, padx=20, pady=20) task_name = Entry(tk) task_name.grid(column=1, row=0, padx=20, pady=20) Label(tk, text="Enter your task's description:").grid(column=0, row=1, padx=20, pady=20) task_description = ScrolledText(tk, width =20, height=10) task_description.grid(column=1, row=1, padx=20, pady=20) Label(tk, text="Enter your task's priority:").grid(column=0, row=2, padx=20, pady=20) task_priority = IntVar() radio_button_1 = Radiobutton(tk, text="Low", value=1, variable=task_priority) radio_button_2 = Radiobutton(tk, text="Medium", value=2, variable=task_priority) radio_button_3 = Radiobutton(tk, text="High", value=3, variable=task_priority) radio_button_1.grid(column=1, row=2, padx=20, pady=20) radio_button_2.grid(column=2, row=2, padx=20, pady=20) radio_button_3.grid(column=3, row=2, padx=20, pady=20) Label(tk, text="Is the task completed?:").grid(column=0, row=3, padx=20, pady=20) task_completed = BooleanVar() check_box = Checkbutton(tk, variable=task_completed) check_box.grid(column=1, row=3, padx=20, pady=20) Button(tk, text="Create task", bg="green", fg="white", command=lambda: create_task(task_name.get(), task_description.get("1.0", END), task_priority.get(), task_completed.get()))\ .grid(column=0, row=4) Button(tk, text="Cancel", bg="black", fg="white", command=render_main_view).grid(column=1, row=4)
def build_gui(self, width=20, height=30, cols=4): # Headers self.headers = [] for h in range(4): e = tk.Entry(self.master, width=width + 10) e.grid(row=0, column=h) self.headers.append(e) e = None # Rows self.rows = [] rowspan = 7 for t in range(4): r = ScrolledText(self.master, width=width, height=height) r.grid(row=1, column=t, rowspan=rowspan) self.rows.append(r) r = None # UPPER/lowercase option for header self.HEADER_UPPERCASE = tk.IntVar() self.HEADER_LOWERCASE = tk.IntVar() tk.Checkbutton(self.master, text="en MAJUSCULES", variable=self.HEADER_UPPERCASE).grid(row=0, column=cols, sticky='N') tk.Checkbutton(self.master, text="en minuscules", variable=self.HEADER_LOWERCASE).grid(row=0, column=cols + 1, sticky='N') # UPPER/lowercase option for rows self.ROWS_UPPERCASE = tk.IntVar() self.ROWS_LOWERCASE = tk.IntVar() tk.Checkbutton(self.master, text="en MAJUSCULES", variable=self.ROWS_UPPERCASE).grid(row=1, column=cols, sticky='N') tk.Checkbutton(self.master, text="en minuscules", variable=self.ROWS_LOWERCASE).grid(row=1, column=cols + 1, sticky='N') # Text size tk.Label(self.master, text="Tamany de lletra:").grid(row=2, column=cols, sticky="NW") self.text_size = tk.Spinbox(self.master, values=(6, 8, 10, 12, 14, 16, 20)) self.text_size.delete(0) self.text_size.insert(0, "8") self.text_size.grid(row=2, column=cols + 1, sticky="NW") # Button self.do = tk.Button(text='Generar etiquetes', command=self.do_action) self.do.grid(row=rowspan + 2, column=cols + 1)
class LongTextbox(Textbox): def config(self, **kwargs): try: self.sentry.config(height=kwargs['height']) except: pass #print("the widget could not be configured") try: self.sentry.config(width=kwargs['width']) except: pass #print("the widget could not be configured") try: #self.text = kwargs['text'] #self.sentry.delete(1.0, END) self.sentry.insert(END, kwargs['text']) except: pass #print("the widget could not be configured") try: self.lang = kwargs['lang'] self.label.config(text=self.lang[self.text]) except: pass def trytoplace(self, **kwargs): self.parent = kwargs['parent'] self.row = kwargs['row'] self.column = kwargs['column'] def place(self, **kwargs): try: self.trytoplace(**kwargs) except: pass #print("widget could not be placed") self.label = Label(self.parent, text=self.lang[self.text]) self.sentry = ScrolledText(self.parent, relief=SOLID) self.label.grid(row=self.row, column=self.column) self.sentry.grid(row=self.row, column=self.column+1, sticky=E) def getData(self): return self.sentry.get('1.0', END + '-1c') def setData(self, data): self.sentry.delete('1.0', END) self.config(text=data)
class LyricWriter(UIWidget): def __init__(self, parent, gy, gx, w, py, label): super().__init__(parent, gy=gy, gx=gx, w=w, label=label) self.input_ = ScrolledText(self.frame, wrap=tk.WORD, width=20, height=12) self.input_.grid()
class Window5: def __init__(self, parent, width, height, title="Генератор Рабочей программы дисциплины", resizable=(False, False), icon=r"main.ico"): self.root = Toplevel(parent) self.root.title(title) self.root.geometry(f"{width}x{height}+200+200") self.root.resizable(resizable[0], resizable[1]) self.root.config(bg="#1f4b99") img = PilImage.open('images/add_png.png') img = img.resize((18, 18), PilImage.ANTIALIAS) self.photo_image = ImageTk.PhotoImage(img) img3 = PilImage.open('images/help_png.png') img3 = img3.resize((18, 18), PilImage.ANTIALIAS) self.photo_image3 = ImageTk.PhotoImage(img3) self.root.iconbitmap('images/osu2.ico') self.frm_form = LabelFrame(self.root, relief=SUNKEN, borderwidth=3, text="Структура дисциплины и распределение её трудоёмкости") self.frm_form.pack(fill=X, ipadx=30, ipady=30, padx=10) self.text_edit = ScrolledText(self.frm_form, width=78, height=25, font=("Times New Roman", 11), wrap=WORD) self.text_edit.grid(row=1, column=1) self.frm_buttons = Frame(self.root) self.frm_buttons.pack(fill=X, ipadx=5, ipady=5) self.btn_submit = Button(self.frm_buttons, text="Добавить", image=self.photo_image, compound=LEFT, command=self.get_text) self.btn_submit.pack(side=LEFT, padx=10, ipadx=10) self.btn_clear = Button(self.frm_buttons, text="Отчистить", command=self.delete_text) self.btn_clear.pack(side=LEFT, padx=10, ipadx=10) self.btn_help = Button(self.frm_buttons, image=self.photo_image3, command=self.help_mb) self.btn_help.pack(side=LEFT, padx=10, ipadx=10) def get_text(self): text_get = self.text_edit.get("1.0", END) doc = DocxTemplate("RPD2.docx") context = {'mesto_discip': text_get, 'description1': "{{description1}}", 'kod_komp1': "{{kod_komp1}}", 'description2': "{{description2}}", 'kod_komp2': "{{kod_komp2}}"} doc.render(context) doc.save("RPD3.docx") document = dc.Document("RPD3.docx") full_text = [] for para in document.paragraphs: full_text.append(para.text) mb.showinfo("Внимание", "Титульный лист рабочей программы сформирован") # self.mainText.insert('1.0', full_text) def delete_text(self): self.text_edit.delete(1.0, END) def help_mb(self): mb.showinfo("Помощь", "Укажите год набора, направление подготовки, профиль и наименование дисциплины. " "Ниже показаны все добавленные вами рабочие программы")
class TextEditor(): # see PyEdit for more def __init__(self, parent=None): # TODO: 1226 why This can generate independent window ? #frm=Toplevel(Frame.__init__(self, parent)) frm=Toplevel() # TODO : assign title based on cmdline tag frm.title('New Text') # TODO , how to make button and Text in a better Layout format ? # grid() param to learn Button(frm, text='Save', command=self.onSave).grid(row=0,column=0) Button(frm, text='Cut', command=self.onCut).grid(row=0,column=1) Button(frm, text='Paste', command=self.onPaste).grid(row=0,column=2) Button(frm, text='Find', command=self.onFind).grid(row=0,column=3) self.text = ScrolledText(frm) self.text.grid(row=1,columnspan=4) #Button(self, text='Save', command=self.onSave).grid() #Button(self, text='Cut', command=self.onCut).grid() #Button(self, text='Paste', command=self.onPaste).grid() #Button(self, text='Find', command=self.onFind).grid() #self.text = ScrolledText(self) def gettext(self): # returns a string return self.text.get('1.0', END+'-1c') # first through last def onSave(self): filename = asksaveasfilename() #print(filename) if filename: alltext = self.gettext() # first through last open(filename, 'w').write(alltext) # store text in file def onCut(self): text = self.text.get(SEL_FIRST, SEL_LAST) # error if no select self.text.delete(SEL_FIRST, SEL_LAST) # should wrap in try self.text.clipboard_clear() self.text.clipboard_append(text) def onPaste(self): # add clipboard text try: text = self.text.selection_get(selection='CLIPBOARD') self.text.insert(INSERT, text) except TclError: pass # not to be pasted def onFind(self): target = askstring('SimpleEditor', 'Search String?') if target: where = self.text.search(target, INSERT, END) # from insert cursor if where: # returns an index print(where) pastit = where + ('+%dc' % len(target)) # index past target #self.text.tag_remove(SEL, '1.0', END) # remove selection self.text.tag_add(SEL, where, pastit) # select found target self.text.mark_set(INSERT, pastit) # set insert mark self.text.see(INSERT) # scroll display self.text.focus() # select text widget
def edit(e): fn = listBox.get(listBox.curselection()) fileWindow = Tk() fileWindow.geometry('+500+200') text = ScrolledText(fileWindow,width = 80,height = 40) fileWindow.mainloop() text.grid() text.insert(INSERT,open(fn,encoding='UTF-8').read()) fileWindow.mainloop()
def getInputs( regexEntry) : Label(mainWindow, font = 25 , text="Please enter the pattern").grid(row=0, column=0) pattern = Entry(mainWindow, width=145); pattern.grid(row=0, column=1) Label(mainWindow , font = 25, text="Please enter the input string").grid(row=1, column=0) inputString = ScrolledText(mainWindow, width=120, height=25); inputString.grid(row=1, column=1) Button(mainWindow, font = 25, text="Process", command=(lambda: regexEntry.SetInputs( pattern.get(), inputString.get("1.0", "end-1c")))).grid(row=1, column=2, sticky="EW" ) Button(mainWindow, font = 25, text="Exit", command=sys.exit).grid(row=2, column=0, columnspan=3, sticky="EW") mainWindow.mainloop()
class MessageDialog(Dialog): def __init__(self, master, title=None, message=None, **kwargs): super().__init__(master, title) self.master = master self.message_queue = queue.Queue() self.queue_handler = QueueHandler(self.message_queue) if message: self.message_queue.put_nowait(message) self.master.after(100, self.poll_queue) def display(self, message): self.textbox.configure(state='normal') self.textbox.insert(tk.END, message + '\n') self.textbox.configure(state='disabled') # Autoscroll to the bottom self.textbox.yview(tk.END) def poll_queue(self): # Check every 100ms if there is a new message in the queue to display while True: try: message = self.message_queue.get(block=False) except queue.Empty: break else: self.display(message) self.master.after(100, self.poll_queue) def body(self, master): self.textbox = ScrolledText(master, width=60, height=10, state='disabled') self.textbox.grid(row=0, sticky='nsew') master.rowconfigure(0, weight=1) master.columnconfigure(0, weight=1) master.pack(fill=tk.BOTH, expand=1) def buttonbox(self): """replace origin wdiget with ttk""" box = ttk.Frame(self) w = ttk.Button(box, text="OK", width=10, command=self.hide, default=tk.ACTIVE) w.pack(side=tk.LEFT, padx=5, pady=5) self.bind("<Return>", self.hide) self.bind("<Escape>", self.hide) box.pack()
def logged_in(uname): start_logged_in() global window_login window_login = Tk() window_login.title("Welcome: " + uname) window_login.geometry("920x560") b2 = Button(window_login, height=3, width=12, text="View Data", fg="green", command=view_command, justify=LEFT) b2.grid(row=0, column=0) b3 = Button(window_login, height=3, width=12, text="Start Chat", command=start_chat, justify=LEFT) b3.grid(row=0, column=1) b4 = Button(window_login, height=3, width=12, text="Timing", command=timming, justify=LEFT) b4.grid(row=0, column=2) gettext = ScrolledText(window_login, height=10, width=100) global textPad background_image = PhotoImage('wallpaper.jpg') textPad = ScrolledText(window_login, image=background_image) # textPad.configure(background='#99ff99', ) # textPad.insert(END, "Welcome "+u ) textPad.grid(row=1, column=1) b6 = Button(window_login, height=3, width=12, text="Logout", fg="red", command=close_logged_in_command, justify=LEFT) b6.grid(row=2, column=0) b6 = Button(window_login, height=3, width=12, text="Clear Data", fg="red", command=clear_data_command, justify=LEFT) b6.grid(row=2, column=2)
class LongTextbox(Textbox): def config(self, **kwargs): try: self.sentry.config(height=kwargs['height']) except: pass #print("the widget could not be configured") try: self.sentry.config(width=kwargs['width']) except: pass #print("the widget could not be configured") try: #self.text = kwargs['text'] #self.sentry.delete(1.0, END) self.sentry.insert(END, kwargs['text']) except: pass #print("the widget could not be configured") try: self.lang = kwargs['lang'] self.label.config(text=self.lang[self.text]) except: pass def trytoplace(self, **kwargs): self.parent = kwargs['parent'] self.row = kwargs['row'] self.column = kwargs['column'] def place(self, **kwargs): try: self.trytoplace(**kwargs) except: pass #print("widget could not be placed") self.label = Label(self.parent, text=self.lang[self.text]) self.sentry = ScrolledText(self.parent, relief=SOLID) self.label.grid(row=self.row, column=self.column) self.sentry.grid(row=self.row, column=self.column + 1, sticky=E) def getData(self): return self.sentry.get('1.0', END + '-1c') def setData(self, data): self.sentry.delete('1.0', END) self.config(text=data)
class Root(Tk): def __init__(self): super(Root, self).__init__() self.title("Tkinter Browse") self.minsize(1000, 600) self.labelFrame = ttk.Label(self, text="") self.labelFrame.grid(row=0, column=1) self.label_frame = ttk.Frame(self, height=50) self.label_frame.grid( row=10) # Stops child widgets of label_frame from resizing it self.entry = ttk.Entry(self.labelFrame, text="", width=50) self.entry.grid() self.button() def button(self): self.button = ttk.Button(self.labelFrame, text="Browse", command=self.filedialog) self.button.grid(column=3, row=0) #self.entry1=ttk.Entry(self.label_frame,width=50) # self.entry1.grid(row=10) ## self.label1=ttk.Label(self.labelFrame,text="",width=100) #self.label1.grid(row=10) def filedialog(self): #root.filename = tkFileDialog.askopenfilename(initialdir = "/",title = "Select file",filetypes = (("jpeg files","*.jpg"),("all files","*.*"))) self.filename = filedialog.askopenfilename(initialdir="/", title="Select file") self.entry.insert(0, self.filename) self.text = docxpy.process(self.filename) print(self.text) self.txt = ScrolledText(self.labelFrame, width=100, height=20) self.txt.grid(row=7) self.txt.insert(const.END, self.text) #self.label1.config(text=self.text) # self.entry1.insert(0,self.text) self.token() def entry(self): self.entry = ttk.Entry(self.labelFrame, text="", width=50) self.entry.grid(column=1, row=6, padx=5, pady=60, ipady=3) return def token(self): self.tkn = Tokenizer(lang='ml', smt=True) #smt is a flag for social-media-text #self.text = docxpy.process(self.filename) print(self.tkn.tokenize(self.text))
class HMDmain(tk.Frame): def __init__(self, parent, *args, **kwargs): tk.Frame.__init__(self, parent, *args, **kwargs) self.parent = parent self.parent.option_add('*tearOff', False) self.after(50, self.onAfter) #set this frame to expand to %100 available space self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) #init menu menubar = Menu(self.parent) self.parent.config(menu=menubar) fileMenu = Menu(menubar) fileMenu.add_command(label="Save", command=self.onSave) fileMenu.add_command(label="Load", command=self.onLoad) fileMenu.add_command(label="Exit", command=self.onExit) menubar.add_cascade(label="File", menu=fileMenu) #init textbox self.text = ScrolledText(self, wrap='word') #add widgets to the layout manager self.text.grid(sticky=inflate) def onExit(self): self.quit() def onSave(self): darkIO.DarkIO.save(asksaveasfilename(), self.text.get(0.0, 'end')) def onLoad(self): if not askyesno( "Clear All Text", "Loading a new file will clear the current project \n" "Would you like to continue?"): return loadText = "" try: fname = askopenfile() loadText = darkIO.DarkIO.load(fname.name) except UnicodeDecodeError: showerror("Invalid File Type", "Unable to read file.") else: self.text.delete(0.0, 'end') self.text.insert(0.0, loadText) def onAfter(self): print("Working") self.after(30000, self.onAfter)
def doSInsert(): select = toString(db.selectDisplay(Stable.get())) print(select) m2 = tk.Tk() frame3 = tk.Frame(m2) text = ScrolledText(frame3) text.insert(tk.END, select) frame3.grid(row=1) text.grid()
def viewStudents(): global students viewStudentWindow = Toplevel(company) viewStudentWindow.title('View Students') viewStudentWindow.geometry('800x600') data = ScrolledText(viewStudentWindow, width=111, height=54) for student in students: data.insert(END, student.printInfo() + '\n\n\n') data.grid(column=0, row=0)
def logmain(): '''Main window. The logs will be displayed here.''' loggui = Tk() loggui.title('Logfile Reader') loggui.config(bg='Gray') label_message = ScrolledText(loggui, width=100, height=20, bg='#e6e6e6') label_message.insert(INSERT, loglist()) label_message.grid(row=2, column=3, columnspan=5, sticky='ew') label_message.config(state="disabled", font=('times', 18)) loggui.mainloop()
class ConsoleUi: """Poll messages from a logging queue and display them in a scrolled text widget.""" def __init__(self, frame, simple_time=False): self.frame = frame # Create a ScrolledText wdiget if simple_time: font='80' else: font='' self.scrolled_text = ScrolledText(frame, state='disabled', height=39) self.scrolled_text.grid(row=0, column=0, sticky=(N, S, W, E)) self.scrolled_text.configure(font='TkFixedFont') self.scrolled_text.tag_config('INFO', foreground='black', font=font) self.scrolled_text.tag_config('DEBUG', foreground='gray', font=font) self.scrolled_text.tag_config('WARNING', foreground='orange', font=font) self.scrolled_text.tag_config('ERROR', foreground='red', font=font) self.scrolled_text.tag_config('CRITICAL', foreground='red', underline=1, font=font) # Create a logging handler using a queue self.log_queue = Queue() self.queue_handler = QueueHandler(self.log_queue) formatter = logging.Formatter('%(asctime)s: %(message)s') if simple_time is True: formatter = logging.Formatter("%(asctime)s: %(message)s", "%H:%M:%S") self.queue_handler.setFormatter(formatter) logger.addHandler(self.queue_handler) # Start polling messages from the queue self.frame.after(100, self.poll_log_queue) def display(self, record): msg = self.queue_handler.format(record) self.scrolled_text.configure(state='normal') self.scrolled_text.insert(tk.END, msg + '\n', record.levelname) self.scrolled_text.configure(state='disabled') # Autoscroll to the bottom self.scrolled_text.yview(tk.END) def poll_log_queue(self): # Check every 100ms if there is a new message in the queue to display while True: try: record = self.log_queue.get(block=False) except Queue_Empty: break else: self.display(record) self.frame.after(100, self.poll_log_queue) def pass_logger(self, in_logger): in_logger.addHandler(self.queue_handler) def set_levels(self, levels): self.queue_handler.addFilter(MyFilter(levels))
class Conclusion(Screen): def __init__(self): Screen.__init__(self) self.grid_columnconfigure(0, weight=1) self.grid_columnconfigure(1, weight=1) self.grid_columnconfigure(2, weight=1) self.grid_columnconfigure(3, weight=1) self.grid_rowconfigure(0, weight=1) self.grid_rowconfigure(1, weight=1) self.grid_rowconfigure(2, weight=1) self.grid_rowconfigure(3, weight=1) self.grid_rowconfigure(4, weight=1) self.grid_rowconfigure(5, weight=1) self.grid_rowconfigure(6, weight=1) self.grid_rowconfigure(7, weight=1) self.grid_rowconfigure(8, weight=1) self.lbl_conclusion_title = tk.Label(self, text="Your Score is:", font=TITLE_FONT) self.lbl_conclusion_title.grid(row=0, column=0, rowspan=2, columnspan=4, sticky="news") self.lbl_conclusion_score = tk.Label(self, text="___/100", font=LABEL_FONT) self.lbl_conclusion_score.grid(row=2, column=1, columnspan=2, sticky="new") self.lbl_old_highscore = tk.Label(self, text="Old Highscores:", font=LABEL_FONT) self.lbl_old_highscore.grid(row=3, column=0, columnspan=4, sticky="news") self.scr_old_highscore = ScrolledText(self, height=3) self.scr_old_highscore.grid(row=4, column=0, columnspan=4,sticky="news") self.lbl_new_highscore = tk.Label(self, text="New Highscores:", font=LABEL_FONT) self.lbl_new_highscore.grid(row=5, column=0, columnspan=4, sticky="news") self.scr_new_highscore = ScrolledText(self, height=3) self.scr_new_highscore.grid(row=6, column=0, columnspan=4, sticky="news") self.btn_retry = tk.Button(self, text="Retry", font=BUTTON_FONT, command=self.go_trivia) self.btn_retry.grid(row=8, column=0, columnspan=2, sticky="news") self.btn_quit = tk.Button(self, text="Quit ", font=BUTTON_FONT, command=self.go_main_menu) self.btn_quit.grid(row=8, column=2, columnspan=2, sticky="news") def go_main_menu(self): Screen.current=0 Screen.switch_frame() def go_trivia(self): #Fix because of trivia turning into a pop up print("WOW! The should go to trivia!") '''Screen.current=1
class Gui: def __init__(self, master): self.master = master master.title("Client") master.geometry("600x750") self.chat = ScrolledText(self.master, state = "disabled", width = 72) self.chat.grid(padx = 4, pady = 4, columnspan = 2) self.chat_entry = ScrolledText(self.master, width = 55, height = 3) self.chat_entry.grid(row = 1, padx = 4, pady = 4) self.send_button = Button(self.master, text = "Send", width = 10, height = 2) self.send_button.grid(row = 1, column = 1, padx = 4, pady = 4)
def initialize(self): """Create the GUI.""" # Set the font default_font = nametofont("TkDefaultFont") default_font['size'] = 12 self.option_add("*Font", default_font) # General commands and bindings self.bind_all('q', self.do_exit) # Create widgets. # First row prbut = ttk.Button(self, text="File:", command=self.do_fileopen) prbut.grid(row=0, column=0, sticky='w') fnlabel = ttk.Label(self, anchor='w', textvariable=self.lamfile) fnlabel.grid(row=0, column=1, columnspan=4, sticky='ew') # Second row rldbut = ttk.Button(self, text="Reload", command=self.do_reload) rldbut.grid(row=1, column=0, sticky='w') # Third row cb = partial(self.on_laminate, event=0) chkengprop = ttk.Checkbutton( self, text='Engineering properties', variable=self.engprop, command=cb ) chkengprop.grid(row=2, column=0, columnspan=3, sticky='w') # Fourth row chkmat = ttk.Checkbutton( self, text='ABD & abd matrices', variable=self.matrices, command=cb ) chkmat.grid(row=3, column=0, columnspan=3, sticky='w') # Fifth row cxlam = ttk.Combobox(self, state='readonly', justify='left') cxlam.grid(row=4, column=0, columnspan=5, sticky='we') cxlam.bind("<<ComboboxSelected>>", self.on_laminate) self.cxlam = cxlam # Sixth row fixed = nametofont('TkFixedFont') fixed['size'] = 12 res = ScrolledText(self, state='disabled', font=fixed) res.grid(row=5, column=0, columnspan=5, sticky='ew') self.result = res
class Logger(Frame): ERROR, BORRING, EVENT, NORMAL = "error", "borring", "event", None def __init__(self, *args, **kw): text_height = kw.pop("text_height", 25) Frame.__init__(self, *args, **kw) self.deque = deque() self.txt = ScrolledText(self, wrap=WORD, state=DISABLED, relief=SUNKEN, height=text_height) self.txt.grid(column=0, row=0, sticky=(N, W, E, S)) self.txt.configure(LoggerColors.default) for k, v in LoggerColors.tags.items(): self.txt.tag_configure(k, v) self.columnconfigure(0, weight=1) self.rowconfigure(0, weight=1) self.after(100, self._toscreen) def __call__(self, *args): self.deque.appendleft(args) def _toscreen(self): if len(self.deque): self.txt["state"] = NORMAL while(len(self.deque)): self.txt.insert( END, "\n[{}] ".format(strftime("%H:%M:%S")), "time", *self.deque.pop()) self.txt.yview(END) self.txt["state"] = DISABLED self.after(100, self._toscreen)
class MarkovDemo(Frame): "MarkovDemo(master=None, **kw) -> MarkovDemo instance" TEXT = dict(height=2, width=46, wrap=WORD) # Text Options GRID = dict(padx=5, pady=5) # Grid Options # Initialize a MarkovDemo instance with a GUI for interaction. def __init__(self, master=None, **kw): "Initialize the MarkovDemo instance's widgets and settings." super().__init__(master, **kw) self.build_widgets() self.place_widgets() self.setup_widgets() self.grid_rowconfigure(2, weight=1) self.grid_rowconfigure(3, weight=1) self.grid_columnconfigure(0, weight=1) self.key = self.primer = None def build_widgets(self): "Build the various widgets that will be used in the program." # Create processing frame widgets. self.processing_frame = LabelFrame(self, text='Processing Mode:') self.mode_var = StringVar(self, 'encode') self.decode_button = Radiobutton(self.processing_frame, text='Decode Cipher-Text', command=self.handle_radiobuttons, value='decode', variable=self.mode_var) self.encode_button = Radiobutton(self.processing_frame, text='Encode Plain-Text', command=self.handle_radiobuttons, value='encode', variable=self.mode_var) self.freeze_var = BooleanVar(self, False) self.freeze_button = Checkbutton(self.processing_frame, text='Freeze Key & Primer', command=self.handle_checkbutton, offvalue=False, onvalue=True, variable=self.freeze_var) # Create encoding frame widgets. self.encoding_frame = LabelFrame(self, text='Encoding Options:') self.chain_size_label = Label(self.encoding_frame, text='Chain Size:') self.chain_size_entry = Entry(self.encoding_frame) self.plain_text_label = Label(self.encoding_frame, text='Plain-Text:') self.plain_text_entry = Entry(self.encoding_frame) # Create input frame widgets. self.input_frame = LabelFrame(self, text='Input Area:') self.input_text = ScrolledText(self.input_frame, **self.TEXT) # Create output frame widgets. self.output_frame = LabelFrame(self, text='Output Area:') self.output_text = ScrolledText(self.output_frame, **self.TEXT) def place_widgets(self): "Place the widgets where they belong in the MarkovDemo frame." # Locate processing frame widgets. self.processing_frame.grid(sticky=EW, **self.GRID) self.decode_button.grid(row=0, column=0, **self.GRID) self.encode_button.grid(row=0, column=1, **self.GRID) self.freeze_button.grid(row=0, column=2, **self.GRID) # Locate encoding frame widgets. self.encoding_frame.grid(sticky=EW, **self.GRID) self.chain_size_label.grid(row=0, column=0, sticky=W, **self.GRID) self.chain_size_entry.grid(row=0, column=1, sticky=EW, **self.GRID) self.plain_text_label.grid(row=1, column=0, sticky=W, **self.GRID) self.plain_text_entry.grid(row=1, column=1, sticky=EW, **self.GRID) self.encoding_frame.grid_columnconfigure(1, weight=1) # Locate input frame widgets. self.input_frame.grid(sticky=NSEW, **self.GRID) self.input_text.grid(sticky=NSEW, **self.GRID) self.input_frame.grid_rowconfigure(0, weight=1) self.input_frame.grid_columnconfigure(0, weight=1) # Locate output frame widgets. self.output_frame.grid(sticky=NSEW, **self.GRID) self.output_text.grid(sticky=NSEW, **self.GRID) self.output_frame.grid_rowconfigure(0, weight=1) self.output_frame.grid_columnconfigure(0, weight=1) def setup_widgets(self): "Setup each widget's configuration for the events they handle." self.input_text.bind('<Key>', self.handle_key_events) self.input_text.bind('<Control-Key-a>', self.handle_control_a) self.input_text.bind('<Control-Key-/>', lambda event: 'break') self.output_text['state'] = DISABLED self.output_text.bind('<Control-Key-a>', self.handle_control_a) self.output_text.bind('<Control-Key-/>', lambda event: 'break') ######################################################################## # Take care of any special event needing dedicated processing. def handle_radiobuttons(self): "Change the interface based on the encoding / decoding setting." if self.encrypting: self.freeze_button.grid() if not self.freeze_var.get(): self.encoding_frame.grid() else: self.freeze_button.grid_remove() if not self.freeze_var.get(): self.encoding_frame.grid_remove() self.handle_key_events(None) def handle_checkbutton(self): "Change the interface based on the key / primer freeze setting." if self.freeze_var.get(): self.encoding_frame.grid_remove() else: self.encoding_frame.grid() def handle_key_events(self, event): "Schedule refreshing the output area after an input area event." if event is None or event.char and event.state | 0o11 == 0o11: self.after_idle(self.refresh) @staticmethod def handle_control_a(event): "Select all text in the widget associated with the given event." event.widget.tag_add(SEL, 1.0, END + '-1c') return 'break' ######################################################################## # Handle interface's updates when either encoding or decoding. def refresh(self): "Refresh the output based on the value of the input." text = self.input_text.get(1.0, END + '-1c') if not text: self.output = text elif self.encrypting: self.encode(text) else: self.decode(text) def output(self, value): "Set the text in the output area to the string value." self.output_text['state'] = NORMAL self.output_text.delete(1.0, END) self.output_text.insert(END, value) if self.encrypting and self.freeze_var.get(): self.output_text.see(END) self.output_text['state'] = DISABLED output = property(fset=output, doc='Output area property.') @property def chain_size(self): "Chain size for the Markov chains used when encrypting." try: value = ast.literal_eval(self.chain_size_entry.get()) assert isinstance(value, int) and 2 <= value <= 256 return value except: self.chain_size_entry.delete(0, END) self.chain_size_entry.insert(0, '2') return 2 @property def plain_text(self): "Plain text or ignored characters in encryption process." try: value = self.repr_to_obj(self.plain_text_entry.get(), '') assert isinstance(value, str) return value except: self.plain_text_entry.delete(0, END) return '' ######################################################################## # Encrypt a string for display in the interface's output area. def encode(self, string): "Encode the string and show the cipher-text in the output." try: cipher = self.build_cipher(string) except ValueError: self.output = '' except: self.output = traceback.format_exc() else: self.output = self.build_header() + '\n\n' + cipher def build_cipher(self, string): "Build cipher-text based on plain-text and return answer." if self.key and self.freeze_var.get(): cipher, primer = me.encrypt_str(string, self.key, self.primer) else: args = string, self.chain_size, self.plain_text cipher, self.key, self.primer = me.auto_encrypt_str(*args) return cipher def build_header(self): "Build header from key and primer values in current use." header = '\n'.join(map(self.bytes_to_repr, self.key.data)) header += '\n' + self.bytes_to_repr(self.primer.data) return header ######################################################################## # Decrypt a string for display in the interface's output area. def decode(self, string): "Decode encrypted message and display plain-text in output." try: cipher = self.extract_keys(string) text = self.extract_text(cipher) except ValueError: self.output = '' except: self.output = traceback.format_exc() else: self.output = text def extract_keys(self, string): "Extract keys to decryption and return the cipher-text area." header, cipher = string.split('\n\n', 1) *key, primer = map(self.repr_to_obj, header.split('\n')) self.key, self.primer = me.Key(tuple(key)), me.Primer(primer) return cipher def extract_text(self, string): "Extract text message from string using built key and primer." text, primer = me.decrypt_str(string, self.key, self.primer) return text ######################################################################## # Provide some special methods to simplify the program's code. @property def encrypting(self): "Encrypting boolean stating current operations mode." return {'encode': True, 'decode': False}[self.mode_var.get()] @staticmethod def bytes_to_repr(obj): "Convert bytes object into suitable representation." if not isinstance(obj, bytes): raise TypeError('Object must be a bytes instance!') return repr(obj)[2:-1] @staticmethod def repr_to_obj(string, prefix='b'): "Convert representation into an equivalent object." for template in '{}"{}"', "{}'{}'": try: return ast.literal_eval(template.format(prefix, string)) except: pass raise ValueError('Cannot convert {!r} to object!'.format(string)) @classmethod def main(cls): "Create context for demo and run a test instance." NoDefaultRoot() root = Tk() root.minsize(420, 330) root.title('Markov Demo 2') test = cls(root) test.grid(sticky=NSEW) root.grid_rowconfigure(0, weight=1) root.grid_columnconfigure(0, weight=1) root.mainloop()
class SshPanel(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.scrolltext = ScrolledText(self, width = 120, font = ("", 14, "normal"), height = 30) self.scrolltext.config(state = "disable") f = Frame(self) self.entry = Entry(f, width = 75, font = ("", 15, "normal")) # self.entry.grab_set() self.entry.focus_set() self.entry.grid(row = 0, column = 0) self.entry.bind("<Return>", lambda event, frame = self: frame._runCommand()) self.button1 = Button(f, text = "sumbmit", font = ("", 15, "normal"), command = lambda frame = self: frame._runCommand()) self.button1.grid(row = 0, column = 1, padx = 4, pady = 2) self.button2 = Button(f, text = "clear", font = ("", 15, "normal"), command = lambda frame = self: frame._deleteText()) self.button2.grid(row = 0, column = 2, padx = 4, pady = 2) f.grid(row = 1, column = 0) self.scrolltext.grid(row = 0, column = 0) with shelve.open("userconfigdb") as db: keys = tuple(db.keys()) if not keys: configButtonCmd() with shelve.open("userconfigdb") as db: self.sshIP = db[tuple(db.keys())[0]].hostaddress self._configButtonCmd() def _deleteText(self): self.scrolltext.config(state = "normal") self.scrolltext.delete("1.0", END) self.scrolltext.config(state = "disable") def _fetch(self, root, vars): attrs = [] for var in vars: t = var.get() if not t: return attrs.append(t) self.username = attrs[0] self.passwd = attrs[1] root.destroy() def _configButtonCmd(self): popwin = PopupWindow("User Config") popwin.grab_set() popwin.focus() form = Frame(popwin) left = Frame(form) right = Frame(form) bottom = Frame(popwin) form.pack(fill = X) left.pack(side = LEFT) right.pack(side = RIGHT, expand = YES, fill = X) # bottom.pack(side = LEFT) fields = ("username", "password") variables = [] for field in fields: lab = Label(left, width = 10, text = field) ent = Entry(right) lab.pack(side = TOP) ent.pack(side = TOP, fill = X) var = StringVar() ent.config(textvariable = var) variables.append(var) Button(popwin, text = "Ok", font = ("", 15, "normal"), command = (lambda vars = variables, root = popwin: self._fetch(root, vars))).pack() def _runCommand(self): command = self.entry.get() self.entry.delete(0, END) self.scrolltext.config(state = "normal") if command != "": ssh = paramiko.SSHClient() try: ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # print(self.username, self.passwd) ssh.connect(self.sshIP, 22, self.username, self.passwd, timeout = 10) stdin,stdout,stderr = ssh.exec_command(command) out = stdout.readlines() err = stderr.readlines() for r in out: self.scrolltext.insert(END, " " + r) for r in err: self.scrolltext.insert(END, " " + r) except: pass finally: ssh.close() self.scrolltext.insert(END, "---------------------------------\n") self.scrolltext.config(state = "disable") self.scrolltext.see("end")
class Editor(Tk): def __init__(self, fname, *args, **kwargs): # This is a tangled mess. I am sorry. Tk.__init__(self, *args, **kwargs) for x in range(1): Grid.columnconfigure(self, x, weight=1) Grid.rowconfigure(self, x, weight=1) self.fname = fname self.opened = None self.tree = ttk.Treeview(self) self.ysb = ttk.Scrollbar(self, orient='vertical', command=self.tree.yview) self.tree.configure(yscroll=self.ysb.set) self.tree.heading('#0', text='Path', anchor='w') self.data = classes.Folder() self.data.load(open(self.fname).read()) self.iidmap = {} self.root_node = self.tree.insert('', 'end', text='/', open=True) self.updatetree() self.st = ScrolledText() self.st.grid(row=1, column=1, sticky=N+E+S+W) self.meta = Frame() self.namel = Label(self.meta) self.namee = Entry(self.meta) self.namel.grid(row=0, column=0) self.namee.grid(row=0, column=1) self.tree.grid(rowspan=2, row=0, column=0, sticky=N+S+E+W) self.meta.grid(row=2, column=1) self.bind('<Control-s>', self.save) self.mb = Menu() self.fm = Menu() self.fm.add_command(label='Save', accelerator='Ctrl+S', command=self.save) self.mb.add_cascade(menu=self.fm, label='Savefile') self.dm = Menu() self.dm.add_command(label='New file', command=self.newfile) self.mb.add_cascade(menu=self.dm, label='Files') self.config(menu=self.mb) def loadf(self, event=None): self.st.delete(1.0, END) self.namee.delete(0, END) if self.data[self.opened]: self.st.insert(1.0, self.data[self.opened].content) self.namee.insert(1, self.data[self.opened].name) def updatetree(self): self.tree.delete(self.root_node) self.root_node = self.tree.insert('', 'end', text='/', open=True) for f in self.data: item = self.tree.insert(self.root_node, 'end', text=f, open=False) self.iidmap[item] = f self.tree.bind('<Double-1>', self.openitem) def openitem(self, event=None): item = self.tree.identify('item', event.x, event.y) if item: self.opened = self.iidmap[item] self.loadf() def save(self, event=None): self.update_fs() open(self.fname, 'w').write(json.dumps(self.data.dump())) def update_fs(self, event=None): self.data[self.opened].write(self.st.get(1.0, END)) self.data[self.opened].rename(self.namee.get()) def newfile(self, event=None): name = input('Filename: ') self.opened = name self.data.create_file(name) self.updatetree()
buttonDesPath.grid(row=1, column=3, sticky=E) RadioYM = Radiobutton( root, text="按月分类", variable=radioVar, value=1) RadioYM.grid(row=2, column=1, sticky=W) RadioYM.select() RadioYMD = Radiobutton( root, text="按天分类", variable=radioVar, value=2) RadioYMD.grid(row=2, column=2, sticky=W) buttonSort = Button(root, text="开始", width=10, command=sort) buttonSort.grid(row=2, column=3, sticky=E) logText = ScrolledText(root) logText.grid(row=3, columnspan=4, sticky=W) logText.insert(END, '\n\n') logText.insert( END, ' ================说明====================\n\n\n\n') logText.insert(END, '1、把待整理目录下所有文件按时间分类,并拷贝到输出目录下按(月/天)分目录保存\n\n') logText.insert(END, '2、如果文件为照片,且带有EXIF信息,则按EXIF中的照片拍摄时间信息进行分类\n') root.mainloop() """ GPS_info = find_GPS_image(pic_path='123.jpg') address = find_address_from_GPS(GPS=GPS_info) print(address) """ #pyinstaller -F -w -p C:\Python35-32\Scripts FilesSort.py
boutonCleUp = Button(fenPolybe, width = 5, text = "up", command = fonction_bouton_cle_up) boutonCleDown = Button(fenPolybe, width = 5, text = "down", command = fonction_bouton_cle_down) boutonCleUp.grid(row = 8, columnspan=5, column = 0) boutonCleDown.grid(row = 8, columnspan=5, column = 1) boutonCrypterPolybe = Button(fenPolybe, width = 15, text="Chiffrer", command = fonction_bouton_crypter_polybe) boutonDecrypterPolybe = Button(fenPolybe, width = 15, text = "Déchiffrer", command = fonction_bouton_decrypter_polybe) saisieMessagePolybe = ScrolledText(fenPolybe, width = 30, height = 3) resultatPolybe = ScrolledText(fenPolybe, width = 30, height = 3) labelMessage = Label(fenPolybe, text = "Message:") labelResultat = Label(fenPolybe, text = "Résultat:") saisieMessagePolybe.grid(column = 0, row=11, columnspan = 6) boutonCrypterPolybe.grid(column = 0, row = 12, columnspan = 3) boutonDecrypterPolybe.grid(column =2, row = 12, columnspan = 6) labelMessage.grid(column = 0, row = 10, columnspan = 6) labelResultat.grid(column = 0, row = 13, columnspan = 6) resultatPolybe.grid(column = 0, row = 14, columnspan=6) alphabet = [A1.get().lower(), A2.get().lower(), A3.get().lower(), A4.get().lower(), A5.get().lower(), B1.get().lower(), B2.get().lower(), B3.get().lower(), B4.get().lower(), B5.get().lower(), C1.get().lower(), C2.get().lower(), C3.get().lower(), C4.get().lower(), C5.get().lower(), D1.get().lower(), D2.get().lower(), D3.get().lower(), D4.get().lower(), D5.get().lower(), E1.get().lower(), E2.get().lower(), E3.get().lower(), E4.get().lower(), E5.get().lower()] mainList = [str(main1.get()), str(main2.get()), str(main3.get()), str(main4.get()), str(main5.get())] mainList2 = [str(mainA.get()), str(mainB.get()), str(mainC.get()), str(mainD.get()), str(mainE.get())] fonction_bouton_cle_down() fenPolybe.mainloop()
class SpinDelight(Frame): def __init__(self): Frame.__init__(self) self.master.geometry("1020x600+150+50") self.master.title("Spin Delight 1.0 - Copyright (c) Robin Thomas") self.master.resizable(0,0) self.grid() self.brwe = Button(self, text = "Browse", command = self.open_file, width = 10, relief = "groove") self.rtxt = Label(self, text="Input Text:") self.txt1 = ScrolledText(self, width = 50, height = 25) self.txt1.bind("<Control-Key-a>", self.select_all_txt1) self.txt1.bind("<Control-Key-A>", self.select_all_txt1) self.spin = Button(self, text = "Spin", command = self.spin_file, width = 10, relief = "groove") self.stxt = Label(self, text="Spun Text:") self.txt2 = ScrolledText(self, width = 50, height = 25) self.txt2.bind("<Control-Key-a>", self.select_all_txt2) self.txt2.bind("<Control-Key-A>", self.select_all_txt2) self.brwe.grid(row = 2, column = 2, pady = 15) self.rtxt.grid(row = 2, column = 0, padx = 25) self.txt1.grid(row = 3, column = 0, columnspan = 10, padx = 25) self.spin.grid(row = 3, column = 12) self.stxt.grid(row = 2, column = 13, padx = 25, pady = 5) self.txt2.grid(row = 3, column = 13, columnspan = 10, padx = 25) def select_all_txt1(self,event): self.txt1.tag_add(SEL, "1.0", END) self.txt1.mark_set(INSERT, "1.0") self.txt1.see(INSERT) return 'break' def select_all_txt2(self,event): self.txt2.tag_add(SEL, "1.0", END) self.txt2.mark_set(INSERT, "1.0") self.txt2.see(INSERT) return 'break' def open_file(self): fname = askopenfilename(filetypes=(("Text files", "*.txt"), ("All files", "*.*") )) if fname: try: self.txt1.delete(0.0, END) f = open(fname,'r') self.txt1.insert(INSERT,f.read()) except: showerror("Open Source File", "Failed to read file\n'%s'" % fname) def spin_file(self): txt = self.txt1.get("1.0", END) self.txt2.delete(0.0, END) if len(txt): try: words = sub(r'([.,?])+', r' \1 ', sub(r'[^a-zA-Z0-9 .,?]+', ' ', txt)).split() w1 = words[0] z = [(words[j - 1], words[j]) for j in range(1, len(words))] values = self.generate_dict(z, w1) string = self.generate_sent(values) if len(string): self.txt2.insert(INSERT, string) else: showerror("Error", "Insufficient data to spin !!") except: showerror("Error", "Nothing to spin !!") def generate_dict(self, x, w1): values = {'.': [w1]} for (wa, wb) in x: if wa in values: values[wa].append(wb) else: values[wa] = [wb] return values def generate_sent(self, values): w1 = '.' w2 = choice(values[w1]) string = w2 values[w1].remove(w2) while values: w1 = w2 if len(values[w1]): w2 = choice(values[w1]) else: del values[w1] w1 = '.' break if w2 in ('.', ',', '?'): string += w2 else: string += " " + w2 values[w1].remove(w2) return string
class CipherGUI(Frame): """ Renders a GUI that allows enciphering/deciphering of text using Bruce Schneier's solitaire algorithm. """ def __init__(self, parent): """ Initializes the GUI elements. """ Frame.__init__(self, parent) self.parent = parent self.parent.title("Solitaire Cipher") self.helpFile = open("help.dat", "r") self.helpText = self.helpFile.read() self.aboutFile = open("about.dat", "r") self.aboutText = self.aboutFile.read() self.toCipher = Text(self.parent, undo = 1) self.toCipher.grid(row = 1, column = 1, padx = 10, pady = 10) self.toCipher.insert(END, "Type text to encipher...") self.toDecipher = Text(self.parent, undo = 1) self.toDecipher.grid(row = 2, column = 1, padx = 10, pady = 10) self.toDecipher.insert(END, "Type text to decipher...") lockImage = PhotoImage(file = "lock.gif") unlockImage = PhotoImage(file = "unlock.gif") self.encipherButton = Button(self.parent, text = "Encipher", command = self._encode, padx = 10, pady = 10, image = lockImage, compound = TOP) self.decipherButton = Button(self.parent, text = "Decipher", command = self._decode, padx = 10, pady = 10, image = unlockImage, compound = TOP) #Due to weirdness with Tk's handling of image references, need to keep a throwaway reference #to maintain iamge icons self.encipherButton.image = lockImage self.encipherButton.grid(row = 1, column = 2, padx = 10, pady = 10) self.decipherButton.image = unlockImage self.decipherButton.grid(row = 2, column = 2, padx = 10, pady = 10) splashImage = PhotoImage(file = "splash.gif") self.splashLabel = Label(self.parent, text = "Solitaire Cipher v1.0", image = splashImage, compound = TOP, font = "Courier") self.splashLabel.image = splashImage self.splashLabel.grid(row = 2, column = 0, padx = 10) self.log = ScrolledText(self.parent, width = 30, height = 22) #Can't use console log method yet. self.log.insert(END, ">> Ready. View Help for entry rules.") self.log.state = DISABLED self.log.grid(row = 1, column = 0, padx = 10, pady = 10, sticky = S) self.log.config(state = DISABLED) self.passphrase = Entry(self.parent, show = "*", width = 30) self.passphrase.grid(row = 1, column = 0, padx = 10, pady = 10, sticky = NE) self.passphrase.xview_moveto(0) self.passphraseLabel = Label(self.parent, text = "Passcode:", padx = 8).grid(row = 1, column = 0, sticky = NW, pady = 10) self.menubar = Menu(self.parent) self.menubar.add_command(label = "About", command = self._display_about) self.menubar.add_command(label = "Help", command = self._display_help) self.menubar.add_command(label = "Quit", command = self.quit) self.parent.config(menu = self.menubar) self.parent.iconbitmap("cards-64.ico") def _console_log(self, message): """ Logs events like decode/encode to the console. """ self.log.config(state = NORMAL) self.log.insert(END, "\n>> " + message) self.log.config(state = DISABLED) self.log.see(END) def _encode(self): """ Encodes the contents of toCipher using Cipher class and places in toDecipher. """ passkey = self.passphrase.get() #If text is retrived to END, newline is added. Must go 1 character less. message = self.toCipher.get(1.0, END+"-1c") if self._validate(message, passkey): passkey = passkey.upper() message = message.replace(" ", "").upper() encode = Cipher(message, passkey) encodedMessage = encode.encipher() self._console_log("Encoding successful. \nSee lower box for result.") self.toDecipher.delete(1.0, END) self.toDecipher.insert(END, encodedMessage) elif passkey == "": self._console_log("Error: no passcode entered.") elif message == "": self._console_log("Error: no message entered.") else: self._console_log("Encoding unsuccessful. \nInput contains one or more \nillegal characters. See Help \nfor rules.") def _decode(self): """ Decodes the contents of toDecipher using Cipher class and places in toCipher. """ passkey = self.passphrase.get() #If text is retrived to END, newline is added. Must go 1 character less. message = self.toDecipher.get(1.0, END+"-1c") if self._validate(message, passkey): passkey = passkey.upper() message = message.replace(" ", "").upper() decode = Cipher(message, passkey) decodedMessage = decode.decipher() self._console_log("Decoding successful. \nSee upper box for result.") self.toCipher.delete(1.0, END) self.toCipher.insert(END, decodedMessage) elif passkey == "": self._console_log("Error: no passcode entered.") elif message == "": self._console_log("Error: no message entered.") else: self._console_log("Decoding unsuccessful. \nInput contains one or more \nillegal characters. See Help \nfor rules.") def _validate(self, message, passkey): """ Checks text input from toCipher, toDecipher, and passphrase fields for illegal characters during cipher/decipher processes. """ passkeyOK = passkey.isalpha() messageOK = message.replace(" ", "").isalpha() return passkeyOK and messageOK def _display_help(self): """ Displays help dialog on menu press. """ help = Toplevel() help.grab_set() help.title("Help") help.resizable(0,0) help.iconbitmap("cards-64.ico") helpMessage = Message(help, text = self.helpText, padx = 10, pady = 10) helpMessage.pack() def _display_about(self): """ Displays about dialog on menu press. """ about = Toplevel() about.grab_set() about.title("About") about.resizable(0,0) about.iconbitmap("cards-64.ico") aboutMessage = Message(about, text = self.aboutText, padx = 10, pady = 10) aboutMessage.pack()
class Frame(Tk.Frame): def __init__(self, master=None): global start_flag Tk.Frame.__init__(self, master) self.gw = Gateway() #### COMMAND DISPLAY self.panid= Tk.IntVar() self.panid=0xABCD self.PanidDisp= Tk.StringVar() self.PanidDisp.set(hex(self.panid)) self.master.title('Lazurite Gateway') self.row_offset = 0 # DISPLAY LOGO # f_command = Tk.Frame(self, relief=Tk.RIDGE, bd=4) f_command = Tk.Frame(self, bd=4) self.image= Tk.PhotoImage(file=LOGO) self.logoBackGround=Tk.Label(f_command, image=self.image, bg='gray', relief=Tk.RIDGE, anchor=Tk.W) f_cb = Tk.Frame(self,bd=4) # DISPLAY Channel self.ch =33 self.chNumberDisp = Tk.IntVar() self.chNumberDisp.set(self.ch) self.l_ch = Tk.Label(f_command,text="Ch", relief=Tk.RIDGE, anchor=Tk.W) self.t_ch = Tk.Entry(f_command,textvariable=self.chNumberDisp,width=10, relief=Tk.SUNKEN, bd=2, state=Tk.NORMAL) self.b_chIncButton = Tk.Button(f_command, font=('Helvetica', '6'), text='+', command=self.chInc) self.b_chDecButton = Tk.Button(f_command, font=('Helvetica', '6'), text='-', command=self.chDec) # DISPLAY Power self.pwr = (1,20) self.l_pwr = Tk.Label(f_command,text="Pwr", relief=Tk.RIDGE, anchor=Tk.W) self.b_pwr = zz.Combobox(f_command,value=self.pwr, width=10,state="readonly") self.b_pwr.current(1) # DISPLAY Rate self.rate = (50,100) self.l_rate = Tk.Label(f_command,text="Rate", relief=Tk.RIDGE, anchor=Tk.W) self.b_rate = zz.Combobox(f_command,value=self.rate, width=10,state="readonly") self.b_rate.current(1) # DISPLAY PANID self.l_panid = Tk.Label(f_command,text="PANID", relief=Tk.RIDGE, anchor=Tk.W) self.t_panid = Tk.Entry(f_command,textvariable=self.PanidDisp,width=10, relief=Tk.SUNKEN, bd=2, state=Tk.NORMAL) # DISPLAY Start/Stop Button self.b_start = Tk.Button(f_command, text='Start', command=self.Start) self.b_stop = Tk.Button(f_command, text='Stop', command=self.Stop, state=Tk.DISABLED) ## Option check buttom self.ign = Tk.BooleanVar() self.c_ign = Tk.Checkbutton(f_command,text="Ignore address",variable=self.ign) # DISPLAY display mode global mac_menu global mac_combobox global mac_mode mac_combobox=zz.Combobox(f_command,value=mac_menu,width=20,state="readonly") mac_combobox.current(mac_mode) ## InfoCorpus # self.InfoCorpus= Tk.PhotoImage(file='InfoCorpusLogo.gif') # self.ImageInforcopus = Tk.Label(f_command, image=self.InfoCorpus, bg='gray', relief=Tk.RIDGE) # DISPLAY save log buttom self.b_savelog=Tk.Button(f_command, text='SAVE', command=self.Save, state=Tk.NORMAL) self.b_clearlog=Tk.Button(f_command, text='CLEAR LOG', command=self.Clear, state=Tk.NORMAL) self.b_view=Tk.Button(f_command, text='VIEW', command=self.View, state=Tk.NORMAL) ## Command Frame Location self.logoBackGround.grid(row=0,column=0) self.b_start.grid(row=0, column=4) self.b_stop.grid(row=0, column=5) self.l_ch.grid(row=2,column=0,sticky=Tk.W + Tk.E,pady=10) self.t_ch.grid(row=2,column=1,padx=20,sticky=Tk.W) self.b_chIncButton.grid(row=2, column=4, sticky=Tk.W + Tk.E + Tk.S) self.b_chDecButton.grid(row=2, column=5, sticky=Tk.W + Tk.E + Tk.S) self.l_pwr.grid(row=4,column=0,sticky=Tk.W + Tk.E,pady=10) self.b_pwr.grid(row=4,column=1,padx=20,sticky=Tk.W) self.l_rate.grid(row=5,column=0,sticky=Tk.W + Tk.E,pady=10) self.b_rate.grid(row=5,column=1,padx=20,sticky=Tk.W) self.l_panid.grid(row=6,column=0,sticky=Tk.W + Tk.E,pady=10) self.t_panid.grid(row=6,column=1,padx=20,sticky=Tk.W) self.c_ign.grid(row=0,column=6,sticky=Tk.W + Tk.E,padx=20) mac_combobox.grid(row=5,column=6,padx=20) self.b_savelog.grid(row=6,column=6,padx=20) self.b_clearlog.grid(row=6,column=7,padx=20) self.b_view.grid(row=6,column=8,padx=20) # self.ImageInforcopus.grid(row=0, column=8) ## LOG WINDOW global XSCALL global YSCALL f_log = Tk.Frame(self) # self.logText = Tk.StringVar() # self.logText.set("") self.s_logtext=ScrolledText(f_log,width=XSCALL, height=YSCALL) self.s_logtext.grid(sticky=Tk.W+Tk.E) self.s_logtext.write = self.write sys.stdout = self.s_logtext ## FRAME Location f_command.pack() f_log.pack() def write(self,str): self.s_logtext.insert(Tk.END,str) time.sleep(0.001) self.s_logtext.yview_scroll(str.count("\n") + 1, "units") def Start(self): global start_flag ## update parameters self.ch = self.chNumberDisp.get() self.pwr = int(self.b_pwr.get()) self.rate = int(self.b_rate.get()) self.panid = int(self.PanidDisp.get(),0) ## parameter check if self.ch < 24 or self.ch > 61: print("ch number error") return if self.pwr != 1 and self.pwr != 20: print("power error =",self.pwr) return if self.rate != 50 and self.rate != 100: print("rate error=",self.rate) return if self.panid <= 0 or self.panid > 0xffff: print("PANID error") return ## Start Gateway self.b_start.configure(state=Tk.DISABLED) self.b_stop.configure(state=Tk.NORMAL) self.b_chIncButton.configure(state=Tk.DISABLED) self.b_chIncButton.configure(state=Tk.DISABLED) self.logoBackGround.configure(bg=BLUE) self.b_savelog.configure(state=Tk.DISABLED) start_flag = True self.init_gateway() def Stop(self): global start_flag self.b_start.configure(state=Tk.NORMAL) self.b_stop.configure(state=Tk.DISABLED) self.b_chIncButton.configure(state=Tk.NORMAL) self.b_chIncButton.configure(state=Tk.NORMAL) self.logoBackGround.configure(bg='gray') self.b_savelog.configure(state=Tk.NORMAL) start_flag = False self.gw.close_driver() self.gw.remove_driver() def chInc(self): self.ch = self.chNumberDisp.get() if self.ch < 61 and self.ch >= 24: self.ch += 1 elif self.ch < 24: self.ch = 24 else: self.ch = 61 self.chSet() def chDec(self): self.ch = self.chNumberDisp.get() if self.ch <= 61 and self.ch > 24: self.ch -= 1 elif self.ch > 61: self.ch = 61 else: self.ch = 24 self.chSet() def chSet(self): self.chNumberDisp.set(self.ch) def Clear(self): self.s_logtext.delete(1.0,Tk.END) def Save(self): filename = Tk.filedialog.asksaveasfile(filetypes = [('Log Files', ('.log'))]) if filename != "": logfile = open(filename.name,mode = 'w') log_data = self.s_logtext.get(1.0,Tk.END) logfile.write(log_data) logfile.close() return def View(self): print ("GADGADGADGADGA") view_file = open("/home/pi/python/camera.jpeg",mode = 'rb') # for i in range(1,1000): # print (view_file.read()) def init_gateway(self): if self.ign.get(): self.mode = 1 else: self.mode = 0 self.gw.load_driver(self.ch,self.pwr,self.rate,self.panid,self.mode) self.gw.open_driver() def close(self): if self.dvice_open: self.gw.close_driver() self.gw.remove_driver()
class Application: def __init__(self, parent): self.parent = parent self.frames() self.f_saved = True #Sampled data saved root.protocol("WM_DELETE_WINDOW", self.on_closing) def on_closing(self): if (self.f_saved==False): if messagebox.askokcancel("Quit", "Sampled data not saved. Do you wanto to quit?"): root.destroy() else: root.destroy() def frames(self): frame1 = Tk.Frame(root, bd=5, relief='raised', borderwidth=1) frame2 = Tk.Frame(root, bd=5, relief='raised') note = ttk.Notebook(frame2) self.tab1 = ttk.Frame(note) self.tab2 = ttk.Frame(note) note.add(self.tab1, text = "Frquency") note.add(self.tab2, text = "Time") # Positioning frame1.pack(side='left', fill='both', padx=5, pady=5) frame2.pack(side='right', fill='both', expand='true') boton_open = Tk.Button(frame1, text ="Open file", command=self.open_file) boton_save = Tk.Button(frame1, text ="Save to file", command=self.save_file) boton_scan = Tk.Button(frame1, text="Scan serial ports", command=self.scan_ports) boton_read = Tk.Button(frame1, text="Read serial data", command=self.read_serial) label1 = Tk.Label(frame1, text="Select Serial Port:") self.sel_puerto = ttk.Combobox(frame1, textvariable='', state="readonly") portnames = scan_serial() self.sel_puerto['values'] = portnames if (portnames != []): self.sel_puerto.current(0) self.text_message = ScrolledText(frame1, height=10, width=20) self.window_var = Tk.IntVar() self.window_var.set(1) #Option rectangular window radio_button1 = Tk.Radiobutton(frame1, text="Rectangular Window", variable=self.window_var, value=1, command=self.win_sel) radio_button2 = Tk.Radiobutton(frame1, text="Hann Window", variable=self.window_var, value=2, command=self.win_sel) radio_button3 = Tk.Radiobutton(frame1, text="Flattop Window", variable=self.window_var, value=3, command=self.win_sel) # Grid boton_open.grid(row=1, column=0, padx=5, pady=5) boton_save.grid(row=2, column=0, padx=5, pady=5) boton_scan.grid(row=3, column=0, padx=5, pady=5) label1.grid(row=4, column=0, padx=5, pady=5) self.sel_puerto.grid(row=5, column=0, padx=5, pady=5) boton_read.grid(row=6, column=0, padx=5, pady=5) self.text_message.grid(row=7, column=0, padx=5, pady=5) radio_button1.grid(row=8, column=0, sticky="W") radio_button2.grid(row=9, column=0, sticky="W") radio_button3.grid(row=10, column=0, sticky="W") #note.grid(row = 0, column=0) note.pack(side='top', fill='both', padx=5, pady=5) #Figure 1 fig1 = Figure(figsize=(10,9)) fig1.suptitle('Sampled signal - Acceleration') ax_11 = fig1.add_subplot(3,1,1) #ax_11.hold(False) ax_11.set_title("Channel X") ax_11.set_ylabel('g') ax_11.grid() #Shows grid. ax_12 = fig1.add_subplot(3,1,2) #ax_12.hold(False) ax_12.set_title("Channel Y") #ax_12.set_xlabel('ms') ax_12.set_ylabel('g') ax_12.grid() #Shows grid. ax_12 = fig1.add_subplot(3,1,3) #ax_12.hold(False) ax_12.set_title("Channel Z") ax_12.set_xlabel('ms') ax_12.set_ylabel('g') ax_12.grid() #Shows grid. #Figure 2 fig2 = Figure(figsize=(10,9)) fig2.suptitle('FFT spectrum') ax_21 = fig2.add_subplot(3,1,1) #ax_21.hold(False) ax_21.set_title("Channel X") ax_21.set_ylabel('g') ax_21.set_xlim(xmax=max_freq) ax_21.grid() ax_22 = fig2.add_subplot(3,1,2) #ax_22.hold(False) ax_22.set_title("Channel Y") #ax_22.set_xlabel('Hz') ax_22.set_xlim(xmax=max_freq) ax_22.set_ylabel('g') ax_22.grid() ax_23 = fig2.add_subplot(3,1,3) #ax_23.hold(False) ax_23.set_title("Channel Z") ax_23.set_xlabel('Hz') #ax_23.set_xlim(xmax=max_freq) ax_23.set_xlim(xmax=max_freq_z) ax_23.set_ylabel('g') ax_23.grid() # Canvas self.canvas2 = FigureCanvasTkAgg(fig1, master=self.tab2) self.canvas2.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) self.toolbar2 = NavigationToolbar2TkAgg(self.canvas2, self.tab2) self.toolbar2.update() self.canvas2._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) self.canvas1 = FigureCanvasTkAgg(fig2, master=self.tab1) self.canvas1.get_tk_widget().pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) self.toolbar1 = NavigationToolbar2TkAgg(self.canvas1, self.tab1) self.toolbar1.update() self.canvas1._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=1) def read_serial(self): puerto = self.sel_puerto.get() print(puerto) message_string = "Port: {0} \n".format(puerto) self.show_message(self.text_message, message_string) estado_serial = False try: serial_avr = serial.Serial(port=puerto, baudrate=500000, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=0) time.sleep(2) # waiting the initialization... print("Initializing") message_string = "Initializing... \n" self.show_message(self.text_message, message_string) if (serial_avr.isOpen() == True): estado_serial = True else: estado_serial = False except (serial.SerialException, ValueError) as ex: #print "Can´t open serial port: " + str(ex) messagebox.showerror( "Result", "Can't open serial port: " + str(ex)) if (estado_serial == True): global g_canal_1, g_canal_2, g_canal_3, datos_a_leer canal_1 = [] canal_2 = [] canal_3 = [] buffer = [] paquete = [] valores = [] serial_avr.flushInput() serial_avr.flushOutput() valores_decod = [] conta_datos_rx = 0; #Received samples counter. print("Sending INI") message_string = "Sending INI \n" self.show_message(self.text_message, message_string) serial_avr.write(b'INI') #Start data sampling command. #serial_avr.write(chr(0x22)) #CRC 'INI'. Not used. serial_avr.write(b"\x7E") #End of packet. global t_timeout timeout_state = False t0 = time.time() #Start loop time stamp. while ((conta_datos_rx < datos_a_leer) and (timeout_state == False)): if serial_avr.inWaiting(): lectura = serial_avr.read(serial_avr.inWaiting()) buffer += lectura valores = [] if len(buffer) > 15: try: i = buffer.index(0x7E) except (ValueError): i = -1 #print("Buffer: {0}".format(buffer)) if i >= 0: paquete = buffer[:i] buffer = buffer[i+1:] #print("Paquete: {0}".format(paquete)) valores=[i for i in paquete] paquete = '' x = 0 while x < len(valores): if valores[x] == 0x7D: valores_decod.append(valores[x+1] ^ 0x20) x = x + 1 else: valores_decod.append(valores[x]) x = x + 1 canal1 = (valores_decod[0] * 256) + valores_decod[1] canal2 = (valores_decod[2] * 256) + valores_decod[3] canal3 = (valores_decod[4] * 256) + valores_decod[5] canal_1.append(canal1) canal_2.append(canal2) canal_3.append(canal3) #print("Canal 1: %s Canal2: %s " % (canal1, canal2)) valores = [] valores_decod = [] conta_datos_rx += 1 ; #print("conta_datos_rx = %s" %conta_datos_rx) #Check if t_timeout seconds have elapsed since time stamp t0 if ((time.time() - t0) > t_timeout): timeout_state = True #print("Serial port timeout") if (timeout_state == False): print("Sending PAR") self.text_message.config(state=Tk.NORMAL) #Enable to modify self.text_message.insert(Tk.END, "Sending PAR \n") self.text_message.config(state=Tk.DISABLED) #Disable - Read only root.update_idletasks() #Needed to make message visible serial_avr.write(b'PAR') #Stop data sampling. serial_avr.write(b"\x7E") #End of packet. serial_avr.close() #Close serial port. print("Amount of samples channel 1: %s" %len(canal_1)) print("Amount of samples channel 2: %s" %len(canal_2)) print("Amount of samples channel 3: %s" %len(canal_3)) message_string = "Amount of samples channel 1: {0} \n".format(len(canal_1)) message_string += "Amount of samples channel 2: {0} \n".format(len(canal_2)) message_string += "Amount of samples channel 3: {0} \n".format(len(canal_3)) self.show_message(self.text_message, message_string) #Keep a copy of the original values g_canal_1 = canal_1[:] #Copy list by value not by reference g_canal_2 = canal_2[:] g_canal_3 = canal_3[:] self.f_saved = False #Sampled data not saved self.window_var.set(1) #Option rectangular window self.plot(self.tab1, self.tab2, canal_1, canal_2, canal_3, win_var=1) else: serial_avr.write(b'PAR') #Stop data sampling. serial_avr.write(b"\x7E") #End of packet. serial_avr.close() #Close serial port. print("Serial port timeout") message_string = ("Serial port timeout \n") self.show_message(self.text_message, message_string) def show_message(self, text_message, message_string): """Shows messages on a scrollable textbox""" text_message.config(state=Tk.NORMAL) #Enable to modify text_message.insert(Tk.END, message_string) text_message.config(state=Tk.DISABLED) #Disable - Read only text_message.see("end") #Show the "end" of text root.update_idletasks() #Needed to make message visible def scan_ports(self): portnames = [] portnames = scan_serial() self.sel_puerto['values'] = portnames if (portnames != []): self.sel_puerto.current(0) def plot(self, tab1, tab2, canal_1, canal_2, canal_3, win_var=1): num_datos = len(canal_1) X = range(0, num_datos, 1) # Scale the signal in g's for indice in X: canal_1[indice] *= g_scale canal_2[indice] *= g_scale canal_3[indice] *= g_scale # Calculates medium value for each channel. vdc_canal_1 = 0 vdc_canal_2 = 0 vdc_canal_3 = 0 for indice in X: vdc_canal_1 += canal_1[indice] vdc_canal_2 += canal_2[indice] vdc_canal_3 += canal_3[indice] vdc_canal_1 = vdc_canal_1 / num_datos vdc_canal_2 = vdc_canal_2 / num_datos vdc_canal_3 = vdc_canal_3 / num_datos #print("Vdc Channel 1: {0}, Vdc Channel 2: {1}".format(vdc_canal_1, vdc_canal_2)) # Substract DC offset for indice in X: canal_1[indice] -= vdc_canal_1 canal_2[indice] -= vdc_canal_2 canal_3[indice] -= vdc_canal_3 #----------------- Plotting ---------- X1 = np.linspace(0, num_datos/5, num=num_datos) # X axis, 5000 sps, 1/5 ms. # Figure 1. Sampled signals. #Channel X ax_11, ax_12, ax_13 = self.canvas2.figure.get_axes() ax_11.clear() ax_11.plot(X1,canal_1) ax_11.set_title("Channel X") ax_11.set_ylabel('g') ax_11.grid() #Shows grid. #Channel Y ax_12.clear() ax_12.plot(X1,canal_2) ax_12.set_title("Channel Y") #ax_12.set_xlabel('ms') ax_12.set_ylabel('g') ax_12.grid() #Shows grid. #Channel Z ax_13.clear() ax_13.plot(X1,canal_3) ax_13.set_title("Channel Z") ax_13.set_xlabel('ms') ax_13.set_ylabel('g') ax_13.grid() #Shows grid. # Figure 2. FFT from signals. #Channel X canal_fft = [] canal_fft = canal_1 N = len(canal_fft) # length of the signal #Window function if(win_var == 2): w = signal.hann(N, sym=False) #Hann (Hanning) window elif(win_var == 3): w = signal.flattop(N, sym=False) #Flattop window else: w = 1 #Rectangular window T = 1.0 / sample_rate y = canal_fft yf = fftpack.fft(y*w)*(2/N) yf = yf[:int(N/2)] xf = np.linspace(0.0, 1.0/(2.0*T), N/2) ax_21, ax_22, ax_23 = self.canvas1.figure.get_axes() ax_21.clear() #ax_21.plot(xf, 2.0/N * np.abs(yf[:N/2])) ax_21.plot(xf, np.abs(yf)) ax_21.grid() ax_21.set_title("Channel X") ax_21.set_ylabel('g') ax_21.set_xlim(xmax=max_freq) #Channel Y canal_fft = [] canal_fft = canal_2 N = len(canal_fft) # length of the signal T = 1.0 / sample_rate y = canal_fft yf = fftpack.fft(y*w)*(2/N) yf = yf[:int(N/2)] xf = np.linspace(0.0, 1.0/(2.0*T), N/2) ax_22.clear() #ax_22.plot(xf, 2.0/N * np.abs(yf[:N/2])) ax_22.plot(xf, np.abs(yf)) ax_22.grid() ax_22.set_title("Channel Y") #ax_22.set_xlabel('Hz') ax_22.set_xlim(xmax=max_freq) ax_22.set_ylabel('g') #Channel Z canal_fft = [] canal_fft = canal_3 N = len(canal_fft) # length of the signal T = 1.0 / sample_rate y = canal_fft yf = fftpack.fft(y*w)*(2/N) yf = yf[:int(N/2)] xf = np.linspace(0.0, 1.0/(2.0*T), N/2) ax_23.clear() #ax_23.plot(xf, 2.0/N * np.abs(yf[:N/2])) ax_23.plot(xf, np.abs(yf)) ax_23.grid() ax_23.set_title("Channel Z") ax_23.set_xlabel('Hz') #ax_23.set_xlim(xmax=max_freq) ax_23.set_xlim(xmax=max_freq_z) ax_23.set_ylabel('g') self.canvas1.draw() self.canvas2.draw() def win_sel(self): """Window selection. Every time a window is selected, the FFT spectrum is calculated, applying the selected window function""" global g_canal_1, g_canal_2, g_canal_3 canal_1 = g_canal_1[:] #Copy list by value not by reference canal_2 = g_canal_2[:] canal_3 = g_canal_3[:] win_var = self.window_var.get() if(len(canal_1) != 0): #Apply only if data available self.plot(self.tab1, self.tab2, canal_1, canal_2, canal_3, win_var) def open_file(self): """Opens dialog to select a file, reads data from file and plots the data""" ftypes = [('Text files', '*.txt'), ('All files', '*')] dlg = filedialog.Open(root, filetypes = ftypes) fl = dlg.show() if fl != '': # Open file for reading arch = open(fl, "r") datos_arch = arch.read() # Searches for every channel, delimited by L1, L2 and L3 tags. canal_1 = extraer_int_tag(datos_arch, 'L1') canal_2 = extraer_int_tag(datos_arch, 'L2') canal_3 = extraer_int_tag(datos_arch, 'L3') print("Amount of samples in channel 1: %s" %len(canal_1)) print("Amount of samples on channel 2: %s" %len(canal_2)) print("Amount of samples on channel 3: %s" %len(canal_3)) message_string = "Amount of samples channel 1: {0} \n".format(len(canal_1)) message_string += "Amount of samples channel 2: {0} \n".format(len(canal_2)) message_string += "Amount of samples channel 3: {0} \n".format(len(canal_3)) self.show_message(self.text_message, message_string) global g_canal_1, g_canal_2, g_canal_3 #Keep a copy of the original values g_canal_1 = canal_1[:] #Copy list by value not by reference g_canal_2 = canal_2[:] g_canal_3 = canal_3[:] self.window_var.set(1) #Option rectangular window self.plot(self.tab1, self.tab2, canal_1, canal_2, canal_3, win_var=1) def save_file(self): ftypes = [('Text files', '*.txt'), ('All files', '*')] dlg = filedialog.SaveAs(root, filetypes = ftypes) fl = dlg.show() if fl != '': global g_canal_1, g_canal_2, g_canal_3 if (len(g_canal_1) > 0): grabar(g_canal_1, g_canal_2, g_canal_3, fl) self.f_saved = True #Sampled data saved else: print("No samled data to save") message_string = "No samled data to save\n" self.show_message(self.text_message, message_string)
class Interface(Frame): def __init__(self, parent): self.parent = parent; Frame.__init__(self, self.parent); self.queue = queue.Queue(); # we have to use a queue because tkinter is not thread safe... self.chat_box = ScrolledText(self.parent, height=25); self.chat_box.grid(row=0); self.message_box = Entry(self.parent); self.message_box.grid(row=1, sticky='we'); self.user_list = Listbox(self.parent, width=15, height=25); self.user_list.grid(row=0, column=1); self.send_button = Button(self.parent, text="Send", width=15, command=self.send_message); self.send_button.grid(row=1, column=1); self.menu = Menu(self.parent); server = Menu(self.menu, tearoff=0); self.menu.add_cascade(label="Server", menu=server); server.add_command(label="Connect", command=self.show_connect_box); server.add_command(label="Disconnect"); root.config(menu=self.menu); self.write_chat_box("", "Use the menu to connect to a server."); self.parent.after(100, self.check_queue); def check_queue(self): try: f = self.queue.get(0); f(); self.parent.after(100, self.check_queue); except queue.Empty: self.parent.after(100, self.check_queue); def write_chat_box(self, name, message): self.chat_box.insert(INSERT, "[{0}] {1}: {2}\r\n".format(strftime("%H:%M:%S"), name, message)); def new_user(self, name): self.user_list.insert(END, name); def show_connect_box(self): self.connect_box = Toplevel(); self.connect_box.title("Connect to a server"); Label(self.connect_box, text="Name: ", width=10, anchor=W).grid(row=0, column=0); self.user_name_box = Entry(self.connect_box, width=35); self.user_name_box.grid(row=0, column=1, sticky='we'); Label(self.connect_box, text="Address: ", width=10, anchor=W).grid(row=1, column=0); self.address_box = Entry(self.connect_box, width=35); self.address_box.grid(row=1, column=1, sticky='we'); Label(self.connect_box, text="Port: ", width=10, anchor=W).grid(row=2, column=0); self.port_box = Entry(self.connect_box, width=35); self.port_box.grid(row=2, column=1, sticky='we'); Button(self.connect_box, text="Connect", width=35, command=self.connect).grid(row=3, column=1); Button(self.connect_box, text="Cancel", width=15, command=self.connect_box.destroy).grid(row=3, column=0); def connect(self): self.user_name = self.user_name_box.get(); self.address = self.address_box.get(); self.port = self.port_box.get(); if(len(self.user_name) == 0): messagebox.showinfo("Error", "Please enter a user name.", parent=self.connect_box); return; if(len(self.address) == 0): messagebox.showinfo("Error", "Please enter a server address.", parent=self.connect_box); return; if(len(self.port) == 0): messagebox.showinfo("Error", "Please enter a server port.", parent=self.connect_box); return; self.port = int(self.port); self.connect_box.destroy(); self.client = ChatClient(self.user_name, self.address, self.port, self); self.client.start(); def send_message(self): name = self.user_name; message = self.message_box.get(); self.queue.put( lambda: self.client.write("%msg%{0}%{1}%".format(name, message)) );
class App(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI() self.bmm = BMMSegment(4) self.mp = MaxProbabilitySegment() self.tagger = HMM_Viterbi_POS_TAGGER() self.parser = TopDownParser() self.cykParser = CYKParser() def initUI(self): self.parent.title("双向最大匹配分词") self.pack(fill=BOTH, expand=1) self.columnconfigure(0, weight=3) self.columnconfigure(1, weight=3) self.columnconfigure(2, pad=7) self.rowconfigure(1, weight=3) self.rowconfigure(5, weight=3) self.menubar = Menu(self.parent) self.fileMenu = Menu(self.menubar, tearoff=0) self.fileMenu.add_command(label="读入规则文件", command=self.onLoadRules_CYK) self.fileMenu.add_separator() self.fileMenu.add_command(label="退出", command=self.parent.quit) self.menubar.add_cascade(label="文件", menu=self.fileMenu) self.parent.config(menu=self.menubar) self.label1 = Label(self, text="请输入PCFG语法规则或加载规则文件(如:S -> NP VP 0.1)") self.label1.grid(sticky=W, pady=4, padx=5) self.inputText = ScrolledText(self) self.inputText.grid(row=1, column=0, columnspan=2, rowspan=3, padx=5, sticky=E+W+N) self.inputText.tag_config('highlight', background='yellow') self.label2 = Label(self, text='请输入文本:') self.label2.grid(row=4, column=0, sticky=W, pady=4, padx=5) self.outputText = ScrolledText(self) self.outputText.grid(row=5, column=0, columnspan=2, rowspan=3, padx=5, sticky=E+S+W) self.rightFrame = Frame(self) self.rightFrame.grid(row=1, column=3, rowspan=7) self.bmmBtn = Button(self.rightFrame, text="双向最大匹配", command=self.onBMM) self.bmmBtn.pack(side="top", expand=True, pady=8) self.mpBtn = Button(self.rightFrame, text="最大概率分词", command=self.onMP) self.mpBtn.pack(side="top", expand=True, pady=8) self.hmmBtn = Button(self.rightFrame, text='HMM词性标注', command=self.onHMM) self.hmmBtn.pack(side="top", expand=True, pady=8) self.parseBtn = Button(self.rightFrame, text='语法分析', command=self.onTopdownParse) self.parseBtn.pack(side="top", expand=True, pady=8) self.cykBtn = Button(self.rightFrame, text='PCFG语法分析', command=self.onCYK) self.cykBtn.pack(side="top", expand=True, pady=8) self.reBtn = Button(self.rightFrame, text='RegEx提取信息', command=self.onRE) self.reBtn.pack(side="top", expand=True, pady=8) # HINT: Place additional button here self.quitBtn = Button(self.rightFrame, text="退出", command=self.onQuit) self.quitBtn.pack(side="top", expand=True, pady=8) def onQuit(self): self.quit() ############################## BMM Segmentation ######################################### def onBMM(self): self.outputText.delete('1.0', END) inStr = self.inputText.get('1.0', END).strip() start = time.clock() result = self.bmm.BMM(inStr, self.inputText) self.outputText.insert(INSERT, result) elapsed = time.clock() - start if result != '': self.label2['text'] = '分词结果 耗时: ' + '{0:.1f} ms'.format(elapsed*1000) ######################### Maximum Probability Segmentation ############################### def onMP(self): self.outputText.delete('1.0', END) inStr = self.inputText.get('1.0', END).strip() start = time.clock() result = self.mp.MaxProbability(inStr) self.outputText.insert(INSERT, result) elapsed = time.clock() - start if result != '': self.label2['text'] = '分词结果 耗时: ' + '{0:.1f} ms'.format(elapsed*1000) ############################## HMM Pos-tagging ########################################## def onHMM(self): self.outputText.delete('1.0', END) inStr = self.inputText.get('1.0', END).strip() if inStr == '': return start = time.clock() segmented = self.mp.MaxProbability(inStr) obs = [w.strip('/') for w in segmented.split()] result = self.tagger.Viterbi(obs) elapsed = time.clock() - start self.outputText.insert(INSERT, result) if result != '': self.label2['text'] = '词性标注结果 耗时: ' + '{0:.1f} ms'.format(elapsed*1000) ############################## Top-down parsing ######################################### def onTopdownParse(self): inStr = self.outputText.get('1.0', END).strip() if inStr == '': sentence = ['the', 'old', 'man', 'cried'] self.outputText.insert(INSERT, ' '.join(sentence)) else: sentence = inStr.strip().split() start = time.clock() succeed = self.parser.parse(sentence) elapsed = time.clock() - start if succeed: self.label2['text'] = '语法分析完成 结果:成功 耗时:' + '{0:.1f} ms'.format(elapsed*1000) newWindow = Toplevel(self) newWindow.title('自顶向下语法分析') self.textbox = Entry(newWindow) self.textbox.pack(fill=X, expand=1) self.tree = Treeview(newWindow) self.tree.heading('#0', text='语法树', anchor='w') self.tree.pack(fill=BOTH, expand=1) parseString = self.parser.printParseTree() self.textbox.insert(INSERT, parseString) self.buildParseTree_TopDown('', 'S', self.parser.rules, self.parser.choices) else: self.label2['text'] = '语法分析完成 结果:失败 耗时:' + '{0:.1f} ms'.format(elapsed*1000) def onLoadRules_TopDown(self): fname = askopenfilename(initialdir='./data', initialfile='rules.txt') if fname != '': self.inputText.delete('1.0', END) with open(fname) as f: self.inputText.insert(INSERT, f.read()) self.parser.loadRules(fname) def buildParseTree_TopDown(self, parent, symbol, rules, choices): if choices[symbol] == -1: newNode = self.tree.insert(parent, 'end', text=symbol, open=True) self.tree.insert(newNode, 'end', text=' | '.join(rules[symbol][0])) else: c = choices[symbol] newParent = self.tree.insert(parent, 'end', text=symbol, open=True) for symbl in rules[symbol][c]: self.buildParseTree_TopDown(newParent, symbl, rules, choices) ############################## CYK-PCFG parsing ######################################### def onLoadRules_CYK(self): fname = askopenfilename(initialdir='./data', initialfile='rules_pcfg.txt') if fname != '': self.inputText.delete('1.0', END) with open(fname) as f: self.inputText.insert(INSERT, f.read()) self.parser.loadRules(fname) def buildParseTree_CYK(self, parent, beg, end, symbol_id): backPt = self.cykParser.BP[beg][end][symbol_id] symbol = self.cykParser.id2symb[symbol_id] if backPt.s == -1: newNode = self.tree.insert(parent, 'end', text=symbol, open=True) self.tree.insert(newNode, 'end', text=self.cykParser.words[beg-1], open=True) else: newParent = self.tree.insert(parent, 'end', text=symbol, open=True) self.buildParseTree_CYK(newParent, beg, backPt.s, backPt.Y) self.buildParseTree_CYK(newParent, backPt.s+1, end, backPt.Z) def onCYK(self): inStr = self.outputText.get('1.0', END).strip() if inStr == '': sentence = 'fish people fish tanks' self.outputText.insert(INSERT, sentence) else: sentence = inStr start = time.clock() parseString, prob = self.cykParser.parse(sentence) elapsed = time.clock() - start self.label2['text'] = 'PCFG语法分析完成 结果:成功 耗时:' + '{0:.1f} ms'.format(elapsed*1000) newWindow = Toplevel(self) newWindow.title('PCFG语法分析') self.textbox = Entry(newWindow) self.textbox.pack(fill=X, expand=1) self.tree = Treeview(newWindow) self.tree.heading('#0', text='语法树 (概率:{0:.8f})'.format(prob), anchor='w') self.tree.pack(fill=BOTH, expand=1) self.textbox.insert(INSERT, parseString) self.buildParseTree_CYK('', 1, len(self.cykParser.words), self.cykParser.symb2id['S']) def onRE(self): window = Toplevel(self) window.title('正则表达式信息提取') label = Label(window) label.pack() result = ScrolledText(window) result.pack(fill=BOTH, expand=1) htmlFile = 'data/凤凰网.html' start = time.clock() titles = regex.fetchTitles(htmlFile) links = regex.fetchLinks(htmlFile) elapsed = time.clock() - start label['text'] = '耗时: {0:.1f} ms'.format(elapsed*1000) result.insert(INSERT, 'Titles:\n') result.insert(INSERT, '\n'.join(titles)) result.insert(INSERT, '\n\nLinks:\n') result.insert(INSERT, '\n'.join(links))
class AppletEditTimecard(object): # pylint: disable=too-many-instance-attributes """""" def __init__(self, parent): """""" self.parent = parent self.timecard_obj = None self.edit_amt_app = None self.root = tkinter.Toplevel() self.root.iconify() self.root.title('Edit Timecard') self.root.geometry('800x%s' % 600) self.msgvar = tkinter.StringVar(self.root) self.date = tkinter.StringVar(self.root) tkinter.Label( self.root, text='Description' ).grid(row=0, column=0) self.msg = tkinter.Message( self.root, textvariable=self.msgvar ).grid(row=0, column=1, sticky=tkinter.E) tkinter.Label( self.root, text='Date' ).grid(row=1, column=0, sticky=tkinter.E) tkinter.Entry( self.root, textvariable=self.date ).grid(row=1, column=1, sticky=tkinter.W) tkinter.Label( self.root, text='Notes' ).grid(row=2, column=0, sticky=tkinter.E) self.notes_entry = ScrolledText(self.root, height=10) self.notes_entry.grid(row=2, column=1, sticky=tkinter.W) tkinter.Label( self.root, text='Period Start' ).grid(row=3, column=0, sticky=tkinter.E) self.period_start = tkinter.StringVar(self.root) self.period_start_entry = tkinter.Entry(self.root, textvariable=self.period_start) self.period_start_entry.grid(row=3, column=1, sticky=tkinter.W) period_end_label = tkinter.Label(self.root, text='Period End') period_end_label.grid(row=4, column=0, sticky=tkinter.E) self.period_end = tkinter.StringVar(self.root) self.period_end_entry = tkinter.Entry(self.root, textvariable=self.period_end) self.period_end_entry.grid(row=4, column=1, sticky=tkinter.W) message_label = tkinter.Label(self.root, text='Message') message_label.grid(row=5, column=0, sticky=tkinter.E) self.message_entry = tkinter.Text(self.root, height=2) self.message_entry.grid(row=5, column=1, sticky=tkinter.W) button_frame = tkinter.Frame(self.root) button_frame.grid(row=6, column=1, sticky=tkinter.E) save_button = tkinter.Button( button_frame, text="Save", name="save-button", command=self.save_btn, padx=7, pady=2) save_button.pack(side='left') edit_amounts_btn = tkinter.Button( button_frame, text="Edit Amounts", name="edit-amounts-button", command=self.edit_amounts_btn_cb, padx=7, pady=2) edit_amounts_btn.pack(side='left') cancel_button = tkinter.Button( button_frame, text="Cancel", name="cancel-button", command=self.cancel_btn, padx=7, pady=2) cancel_button.pack(side='left') def cancel_btn(self): """""" self.parent.root.deiconify() self.root.iconify() def edit_amounts_btn_cb(self): """""" if self.edit_amt_app is None: self.edit_amt_app = AppletEditTimecardAmounts(self) self.root.iconify() self.edit_amt_app.root.deiconify() self.edit_amt_app.set_edit_form(self.timecard_obj) def form_to_obj(self): """Update Timecard obj from form""" self.timecard_obj.period_start = dt.strptime(self.period_start.get(), api.DATE_INPUT_FORMAT).strftime(api.DATE_ISO_FORMAT) self.timecard_obj.period_end = dt.strptime( self.period_end.get(), api.DATE_INPUT_FORMAT).strftime(api.DATE_ISO_FORMAT) self.timecard_obj.date = dt.strptime(self.date.get(), api.DATE_INPUT_FORMAT).strftime(api.DATE_ISO_FORMAT) self.timecard_obj.message = self.message_entry.get('1.0', 'end-1c') self.timecard_obj.notes = self.notes_entry.get('1.0', 'end-1c') def save_btn(self): """Saves edited timecard before posting.""" self.form_to_obj() print(self.timecard_obj.to_dict()) result = api.TimecardSchema().load(self.timecard_obj.to_dict()) if result.errors: print(result.errors) else: lib.save_timecard(self.timecard_obj.to_dict()) self.root.iconify() self.parent.root.deiconify() self.parent.load() def set_edit_form(self, timecard_dict): """""" self.timecard_obj = api.Timecard(**timecard_dict) self.root.title('Edit Timecard Number %s' % self.timecard_obj.id) self.date.set(dt.strptime( self.timecard_obj.date, api.DATE_ISO_FORMAT).strftime(api.DATE_INPUT_FORMAT)) self.notes_entry.delete('1.0', tkinter.END) self.notes_entry.insert( tkinter.END, self.timecard_obj.notes if self.timecard_obj.notes else '') self.period_start.set( dt.strptime( self.timecard_obj.period_start, api.DATE_ISO_FORMAT).strftime(api.DATE_INPUT_FORMAT)) self.period_end.set( dt.strptime( self.timecard_obj.period_end, api.DATE_ISO_FORMAT).strftime(api.DATE_INPUT_FORMAT)) self.message_entry.delete('1.0', tkinter.END) self.message_entry.insert( tkinter.END, self.timecard_obj.message if self.timecard_obj.message else '') self.update_summary() def update_summary(self): """""" set_edit_timecard_msg(self.msgvar, self.timecard_obj)
def onlineconversion(Ref,tab_onlineconversion): ##online conversion tab # Title r=0 tle_onlineconversion = Label(tab_onlineconversion, text="PTV Online Conversion", font=("Arial Bold", 30)) tle_onlineconversion.grid(column=0, row=r) #ticket r=r+1 tkt_lbl_onlineconversion=Label(tab_onlineconversion, text="Ticket", font=("Arial",10)) tkt_lbl_onlineconversion.grid(column=0, row=r) ticket_onlineconversion = Entry(tab_onlineconversion,width=10) ticket_onlineconversion.grid(column=1, row=r) #conversion start date r=r+1 conversion_start_lbl_onlineconversion=Label(tab_onlineconversion,text="Conversion Start Date (example: 2018-1-31)", font=("Arial",10)) conversion_start_lbl_onlineconversion.grid(column=0, row=r) conversion_start_date_onlineconversion = DateEntry(tab_onlineconversion, font=('Helvetica', 10, tk.NORMAL), border=0) conversion_start_date_onlineconversion.grid(column=1,row=r) #conversion end date r=r+1 conversion_end_lbl_onlineconversion=Label(tab_onlineconversion,text="Conversion End Date (example: 2018-1-31)", font=("Arial",10)) conversion_end_lbl_onlineconversion.grid(column=0, row=r) conversion_end_date_onlineconversion = DateEntry(tab_onlineconversion, font=('Helvetica', 10, tk.NORMAL), border=0) conversion_end_date_onlineconversion.grid(column=1,row=r) #Conversion r=r+1 conversion_lbl_onlineconversion1=Label(tab_onlineconversion,text="Define conversion", font=("Arial",15)) conversion_lbl_onlineconversion1.grid(column=0, row=r+4) conversion_lbl_onlineconversion2=Label(tab_onlineconversion,text="Pattern: 'name:cpk'", font=("Arial",10)) conversion_lbl_onlineconversion2.grid(column=0, row=r+5) conversion_lbl_onlineconversion3=Label(tab_onlineconversion,text="Example: 'Homepage:abE304245Sgbrw'", font=("Arial",10)) conversion_lbl_onlineconversion3.grid(column=0, row=r+6) conversion_onlineconversion=[] for i in list(range(0,9)): conversion_onlineconversion.append(PairEntry(tab_onlineconversion,font=("Arial",10,tk.NORMAL),border=0)) conversion_onlineconversion[i].grid(column=1,row=r) i=i+1 r=r+1 #campaign start date r=r+1 campaign_start_lbl_onlineconversion=Label(tab_onlineconversion,text="Campaign Start Date (example: 2018-1-31)", font=("Arial",10)) campaign_start_lbl_onlineconversion.grid(column=0, row=r) campaign_start_date_onlineconversion = DateEntry(tab_onlineconversion, font=('Helvetica', 10, tk.NORMAL), border=0) campaign_start_date_onlineconversion.grid(column=1,row=r) #campaign end date r=r+1 campaign_end_lbl_onlineconversion=Label(tab_onlineconversion,text="Campaign End Date (example: 2018-1-31)", font=("Arial",10)) campaign_end_lbl_onlineconversion.grid(column=0, row=r) campaign_end_date_onlineconversion = DateEntry(tab_onlineconversion, font=('Helvetica', 10, tk.NORMAL), border=0) campaign_end_date_onlineconversion.grid(column=1,row=r) #ISCIs r=r+1 ISCI_lbl_onlineconversion=Label(tab_onlineconversion,text="ISCIs", font=("Arial",10)) ISCI_lbl_onlineconversion.grid(column=0, row=r) #ISCIs_onlineconversion = AutocompleteEntry(tab_onlineconversion) #ISCIs_onlineconversion.build(entries=commercials) #ISCIs_onlineconversion.LISTBOX_HEIGHT=10 #ISCIs_onlineconversion.pack() ISCIs_onlineconversion = ScrolledText(tab_onlineconversion,width = 25, height = 6) ISCIs_onlineconversion.grid(column=1, row=r) # Networks r=r+1 Network_lbl_onlineconversion1=Label(tab_onlineconversion,text="Neworks", font=("Arial",10)) Network_lbl_onlineconversion1.grid(column=0, row=r) Network_lbl_onlineconversion2=Label(tab_onlineconversion,text="Example: 'Adobe:ABC,ESPNHD,CCHD'", font=("Arial",10)) Network_lbl_onlineconversion2.grid(column=0, row=r+1) network_onlineconversion=[] for i in list(range(0,3)): network_onlineconversion.append(PairEntry(tab_onlineconversion,font=("Arial",10,tk.NORMAL),border=0)) network_onlineconversion[i].grid(column=1,row=r) i=i+1 r=r+1 # lift cuts r=r+1 Lift_lbl_onlineconversion=Label(tab_onlineconversion,text="Lift Analysis", font=("Arial",10)) Lift_lbl_onlineconversion.grid(column=0,row=r) Lift_onlineconversion = Listbox(tab_onlineconversion, selectmode = "multiple",height=5 ) Lift_List=['Overall','Network','NetworkDaypart','Day','Frequency','Commerical'] for i in list(range(0,len(Lift_List))): Lift_onlineconversion.insert(i,Lift_List[i]) Lift_onlineconversion.grid(column=1,row=r) #submit button r=r+1 def clicked_onlineconversion(): error_message='' ticket_input='' #check ticket number input try: ticket=ticket_onlineconversion.get() tkt=int(ticket) ticket_input=ticket_input+"ticket='"+ticket+"' \n" except: error_message="Please submit a ticket in number. \n" #Check all date field all_dates=[] dates = namedtuple("dates", ["name", "widget"]) date_fields=[dates('conversion_start_date',conversion_start_date_onlineconversion), dates('conversion_end_date',conversion_end_date_onlineconversion), dates('tv_campaign_start_date',campaign_start_date_onlineconversion), dates('tv_campaign_end_date',campaign_end_date_onlineconversion)] for dt in date_fields: try: d=[int(x) for x in dt.widget.get()] all_dates.append(datetime(d[0],d[1],d[2])) d=[str(x) for x in d] ticket_input=ticket_input+dt.name+"=datetime("+d[0]+","+d[1]+","+d[2]+") \n" except: error_message=error_message+"Please input a valid "+dt.name+". \n" #print(date_fields) try: if all_dates[0]>all_dates[1]: error_message=error_message+"Please have conversion end date after conversion start date. \n" except: print() try: if all_dates[2]>all_dates[3]: error_message=error_message+"Please have campaign end date after campaign start date. \n" except: print() #Check all conversions error_conversion='' conversion=[x.get() for x in conversion_onlineconversion] conversion=[x for x in conversion if x[0]!='' or x[1]!=''] if len(conversion)==0: error_conversion=error_conversion+"Please define conversions. \n" conv_name=[x[0].replace(' ','') for x in conversion] conv_pixel=[x[1].replace(' ','') for x in conversion] if '' in conv_name or '' in conv_pixel: error_conversion=error_conversion+"Please define all conversions. \n" wrong_pixel=[x for x in conv_pixel if re.compile('[A-Za-z0-9]+').sub('', x)!=''] if len(wrong_pixel)>0: error_conversion=error_conversion+"Please make sure conversion pixels can only have number or letter. \n" wrong_name=[x for x in conv_name if re.compile('[A-Za-z0-9_]+').sub('', x)!='' or re.compile('[A-Za-z]+').sub('', x[0])!='' ] if len(wrong_name)>0: error_conversion=error_conversion+"Please make sure conversion names must starts with letter and can only contain letter, number or '_'. \n" if error_conversion=='': ticket_input=ticket_input+"conversions = namedtuple('conversions', ['pixel', 'name']) \n" ticket_input=ticket_input+"segment=["+",".join(["conversions('"+x[1]+"','"+x[0]+"')" for x in conversion]) ticket_input=ticket_input+"] \n" else: error_message=error_message+error_conversion #check ISCIs error_ISCI='' ISCIs=ISCIs_onlineconversion.get(1.0,END) ISCIs=[x for x in ISCIs.split("\n") if x!=''] if len(ISCIs)==0: error_ISCI=error_ISCI+"Please input ISCIs. \n" commercials=pd.read_csv(Ref+"Vizio_Commercial_IDs.csv") commercials=list(commercials['commercial_id'].unique()) ISCIs_wrong=[x for x in ISCIs if x not in commercials] if len(ISCIs_wrong)>0: error_ISCI=error_ISCI+"Please check following ISCIs: "+",".join(ISCIs_wrong)+". \n" if error_ISCI=='': ticket_input=ticket_input+"ISCI=['"+",'".join(ISCIs)+"'] \n" else: error_message=error_message+error_ISCI #Check Networks error_network='' network=[x.get() for x in network_onlineconversion] network=[[x[0].replace(' ',''),x[1].replace(' ','')] for x in network if x[0]!='' or x[1]!=''] if len(network)==0: error_network=error_network+"Please define plans. \n" plan=[x[0].replace(' ','') for x in network] networks=[x[1].replace(' ','') for x in network] if '' in plan or '' in networks: error_network=error_network+"Please define all plans. \n" wrong_name=[x for x in plan if re.compile('[A-Za-z0-9_]+').sub('', x)!='' or re.compile('[A-Za-z]+').sub('', x[0])!='' ] if len(wrong_name)>0: error_network=error_network+"Please make sure plan names must starts with letter and can only contain letter, number or '_'. \n" affiliate=pd.read_csv(Ref+'Vizio_Networks_Affiliates.csv') affiliate=list(affiliate['Station_affiliate'].unique()) for n in networks: nw=n.split(',') nw_wrong=[n for n in nw if n not in affiliate] if len(nw_wrong)>0: error_network=error_network+"Please check following network names: "+",".join(nw_wrong)+". \n" if error_network=='': ticket_input=ticket_input+"Networks=[" ticket_input=ticket_input+",".join(["[['"+x[1].replace(",","','")+"'],'"+x[0]+"']" for x in network]) ticket_input=ticket_input+"] \n" else: error_message=error_message+error_network #check lift cuts Lift=Lift_onlineconversion.curselection() lift=[] for i in Lift: lift.append(Lift_List[i]) if len(lift)==0: error_message=error_message+"Please select lift analysis. \n" else: ticket_input=ticket_input+"Deliverable=['"+",'".join(lift)+"'] \n" #final output if error_message!="": messagebox.showinfo('Error', error_message) else: messagebox.showinfo('Ticket Input', ticket_input) submit_onlineconversion = Button(tab_onlineconversion, text="Submit", command=clicked_onlineconversion) submit_onlineconversion.grid(column=0, row=r)
class Application(tkinter.Tk): def __init__(self): """Initialize widgets, methods.""" tkinter.Tk.__init__(self) self.grid() fontoptions = families(self) font = Font(family="Verdana", size=10) menubar = tkinter.Menu(self) fileMenu = tkinter.Menu(menubar, tearoff=0) editMenu = tkinter.Menu(menubar, tearoff=0) fsubmenu = tkinter.Menu(editMenu, tearoff=0) ssubmenu = tkinter.Menu(editMenu, tearoff=0) # adds fonts to the font submenu and associates lambda functions for option in fontoptions: fsubmenu.add_command(label=option, command = lambda: font.configure(family=option)) # adds values to the size submenu and associates lambda functions for value in range(1,31): ssubmenu.add_command(label=str(value), command = lambda: font.configure(size=value)) # adds commands to the menus menubar.add_cascade(label="File",underline=0, menu=fileMenu) menubar.add_cascade(label="Edit",underline=0, menu=editMenu) fileMenu.add_command(label="New", underline=1, command=self.new, accelerator="Ctrl+N") fileMenu.add_command(label="Open", command=self.open, accelerator="Ctrl+O") fileMenu.add_command(label="Save", command=self.save, accelerator="Ctrl+S") fileMenu.add_command(label="Exit", underline=1, command=exit, accelerator="Ctrl+Q") editMenu.add_command(label="Copy", command=self.copy, accelerator="Ctrl+C") editMenu.add_command(label="Cut", command=self.cut, accelerator="Ctrl+X") editMenu.add_command(label="Paste", command=self.paste, accelerator="Ctrl+V") editMenu.add_cascade(label="Font", underline=0, menu=fsubmenu) editMenu.add_cascade(label="Size", underline=0, menu=ssubmenu) editMenu.add_command(label="Color", command=self.color) editMenu.add_command(label="Bold", command=self.bold, accelerator="Ctrl+B") editMenu.add_command(label="Italic", command=self.italic, accelerator="Ctrl+I") editMenu.add_command(label="Underline", command=self.underline, accelerator="Ctrl+U") editMenu.add_command(label="Overstrike", command=self.overstrike, accelerator="Ctrl+T") editMenu.add_command(label="Undo", command=self.undo, accelerator="Ctrl+Z") editMenu.add_command(label="Redo", command=self.redo, accelerator="Ctrl+Y") self.config(menu=menubar) """Accelerator bindings. The cut, copy, and paste functions are not bound to keyboard shortcuts because Windows already binds them, so if Tkinter bound them as well whenever you typed ctrl+v the text would be pasted twice.""" self.bind_all("<Control-n>", self.new) self.bind_all("<Control-o>", self.open) self.bind_all("<Control-s>", self.save) self.bind_all("<Control-q>", self.exit) self.bind_all("<Control-b>", self.bold) self.bind_all("<Control-i>", self.italic) self.bind_all("<Control-u>", self.underline) self.bind_all("<Control-T>", self.overstrike) self.bind_all("<Control-z>", self.undo) self.bind_all("<Control-y>", self.redo) self.text = ScrolledText(self, state='normal', height=30, wrap='word', font = font, pady=2, padx=3, undo=True) self.text.grid(column=0, row=0, sticky='NSEW') # Frame configuration self.grid_columnconfigure(0, weight=1) self.resizable(True, True) """Command functions. *args is included because the keyboard bindings pass two arguments to the functions, while clicking in the menu passes only 1.""" def new(self, *args): """Creates a new window.""" app = Application() app.title('Python Text Editor') app.option_add('*tearOff', False) app.mainloop() def color(self): """Changes selected text color.""" try: (rgb, hx) = tkinter.colorchooser.askcolor() self.text.tag_add('color', 'sel.first', 'sel.last') self.text.tag_configure('color', foreground=hx) except TclError: pass def bold(self, *args): """Toggles bold for selected text.""" try: current_tags = self.text.tag_names("sel.first") if "bold" in current_tags: self.text.tag_remove("bold", "sel.first", "sel.last") else: self.text.tag_add("bold", "sel.first", "sel.last") bold_font = Font(self.text, self.text.cget("font")) bold_font.configure(weight="bold") self.text.tag_configure("bold", font=bold_font) except TclError: pass def italic(self, *args): """Toggles italic for selected text.""" try: current_tags = self.text.tag_names("sel.first") if "italic" in current_tags: self.text.tag_remove("italic", "sel.first", "sel.last") else: self.text.tag_add("italic", "sel.first", "sel.last") italic_font = Font(self.text, self.text.cget("font")) italic_font.configure(slant="italic") self.text.tag_configure("italic", font=italic_font) except TclError: pass def underline(self, *args): """Toggles underline for selected text.""" try: current_tags = self.text.tag_names("sel.first") if "underline" in current_tags: self.text.tag_remove("underline", "sel.first", "sel.last") else: self.text.tag_add("underline", "sel.first", "sel.last") underline_font = Font(self.text, self.text.cget("font")) underline_font.configure(underline=1) self.text.tag_configure("underline", font=underline_font) except TclError: pass def overstrike(self, *args): """Toggles overstrike for selected text.""" try: current_tags = self.text.tag_names("sel.first") if "overstrike" in current_tags: self.text.tag_remove("overstrike", "sel.first", "sel.last") else: self.text.tag_add("overstrike", "sel.first", "sel.last") overstrike_font = Font(self.text, self.text.cget("font")) overstrike_font.configure(overstrike=1) self.text.tag_configure("overstrike", font=overstrike_font) except TclError: pass def undo(self, *args): """Undo function""" try: self.text.edit_undo() except TclError: pass def redo(self, *args): """Redo function""" try: self.text.edit_redo() except TclError: pass def copy(self, *args): """Copy text""" self.clipboard_clear() self.clipboard_append(self.text.selection_get()) def cut(self, *args): """Cut text""" self.copy self.text.delete("sel.first", "sel.last") def paste(self, *args): """Paste text""" insertion = self.selection_get(selection = "CLIPBOARD") self.text.insert(0.0, insertion) def open(self, *args): """Opens a file dialog to open a plain text file.""" filename = tkinter.filedialog.askopenfilename() with open(filename) as f: text = f.read() self.text.delete("1.0", "end") self.text.insert('insert', text) def save(self, *args): try: """Opens a file dialog to save the text in plain text format.""" text = self.text.get("1.0", "end") filename = tkinter.filedialog.asksaveasfilename() with open(filename, 'w') as f: f.write(text) except FileNotFoundError: pass def exit(self, *args): """Exits the program.""" self.quit()
class ExpressQuery(Frame): def __init__(self, master): Frame.__init__(self, master) self.root = master self.root.bind_all('<F5>', self.update_all_posts) self.root.bind_all('<Escape>', self.clear_input) self.all_posts = {} # 运单列表 self.root.title('快递助手 v1.2') self.root.iconbitmap('logo.ico') self.root.resizable(width=False, height=False) self.auto_company_url = 'http://www.kuaidi100.com/autonumber/autoComNum?text=' self.query_url = 'http://www.kuaidi100.com/query?' with open('company_codes.json', 'r', encoding='utf-8') as f: self.company_codes = json.loads(f.read()) self.company_names = dict((v, k) for k, v in self.company_codes.items()) with open('state.json', 'r', encoding='utf-8') as f: self.state = json.loads(f.read()) parent_frame = Frame(self.root) parent_frame.grid(padx=10, pady=10, stick=E + W + N + S) add_post_group = Frame(parent_frame) post_id_label = Label(add_post_group, text='运单号:') self.post_id_var = tkinter.StringVar() # 运单号 self.post_id_field = Entry(add_post_group, width=20, textvariable=self.post_id_var) self.post_id_field.bind('<Return>', self.handle_add_post) post_note_label = Label(add_post_group, text='备注:') self.post_note_var = tkinter.StringVar() # 运单注释 post_note_field = Entry(add_post_group, width=20, textvariable=self.post_note_var) post_note_field.bind('<Return>', self.handle_add_post) post_company_label = Label(add_post_group, text='公司:') self.post_company_name_var = tkinter.StringVar() self.post_company_field = Combobox(add_post_group, textvariable=self.post_company_name_var, values=list(self.company_names.values()), width=12) post_add_button = Button(add_post_group, text='添加', width=10, command=self.handle_add_post) clear_input_button = Button(add_post_group, text='清空', width=10, command=self.clear_input) post_id_label.grid(row=0, column=0) self.post_id_field.grid(row=0, column=1) post_note_label.grid(row=0, column=2) post_note_field.grid(row=0, column=3) post_company_label.grid(row=0, column=4) self.post_company_field.grid(row=0, column=5) post_add_button.grid(row=0, column=6, padx=5) clear_input_button.grid(row=0, column=7, padx=5) self.post_id_field.focus_set() show_posts_group = Frame(parent_frame) self.posts = Treeview(show_posts_group, height=10, selectmode='browse', columns=('note', 'company_name', 'state', 'last_update')) # 运单列表框 self.x_scrollbar = Scrollbar(show_posts_group, orient=tkinter.HORIZONTAL, command=self.posts.xview) self.y_scrollbar = Scrollbar(show_posts_group, orient=tkinter.VERTICAL, command=self.posts.yview) self.posts.config(xscroll=self.x_scrollbar.set, yscroll=self.y_scrollbar.set) self.posts.column('#0', width=130) self.posts.heading('#0', text='运单号') self.posts.column('note', width=130) self.posts.heading('note', text='备注') self.posts.column('company_name', width=80) self.posts.heading('company_name', text='公司名称') self.posts.column('state', width=180) self.posts.heading('state', text='运单状态') self.posts.column('last_update', width=150) self.posts.heading('last_update', text='最后更新') self.posts.bind('<<TreeviewSelect>>', self.show_post_detail) self.posts.bind('<Delete>', self.remove_post) self.post_detail = ScrolledText(show_posts_group, bg='white', width=92, height=16, state=tkinter.DISABLED) self.posts.grid(row=0, column=0, sticky=W + N + S) self.x_scrollbar.grid(row=1, column=0, sticky=E + W) self.y_scrollbar.grid(row=0, column=1, sticky=N + S) self.post_detail.grid(row=2, column=0, sticky=W + N + S, padx=(0, 10)) status_label = Label(parent_frame, text='F5 更新全部运单动态') add_post_group.grid(row=0, column=0) show_posts_group.grid(row=1, column=0) status_label.grid(row=2, column=0) self.get_history() # 获取历史记录 def get_history(self): try: with open('history.json', 'r', encoding='utf-8') as f: self.all_posts = json.loads(f.read()) for post_id in self.all_posts: self.posts.insert('', 0, post_id, text=post_id, values=(self.all_posts[post_id]['note'], self.all_posts[post_id]['company_name'], self.state[self.all_posts[post_id]['state']], self.all_posts[post_id]['last_update'])) except ValueError: with open('history.json', 'w', encoding='utf-8') as f: json.dump(self.all_posts, f) print('No history record found') # 保存运单记录 def save_history(self): with open('history.json', 'w', encoding='utf-8') as f: json.dump(self.all_posts, f) # 新增运单 def handle_add_post(self, event=None): if self.post_id_var.get() == '': return if self.post_company_name_var.get(): company_code = self.company_codes[self.post_company_name_var.get()] else: try: with request.urlopen(self.auto_company_url + self.post_id_var.get()) as response: company_code = json.loads(response.read().decode())['auto'][0]['comCode'] except IndexError: return post = { 'post_id': self.post_id_var.get(), 'company_code': company_code, 'company_name': self.company_names[company_code], 'note': self.post_note_var.get()} self.all_posts[post['post_id']] = post try: self.posts.index(post['post_id']) except tkinter.TclError: self.posts.insert('', 0, self.post_id_var.get(), text='%s' % self.post_id_var.get()) handle_add_post = threading.Thread(target=self.handle_add_post_thread, args=(post,)) handle_add_post.start() self.clear_input() def handle_add_post_thread(self, post): self.update_post_detail_thread(post) self.posts.selection_set(post['post_id']) self.save_history() # 清空输入框 def clear_input(self, event=None): self.post_id_var.set('') self.post_note_var.set('') self.post_company_name_var.set('') self.post_id_field.focus_set() # 移除运单 def remove_post(self, event=None): self.all_posts.pop(self.posts.selection()[0]) self.posts.delete(self.posts.selection()[0]) self.post_detail.config(state=tkinter.NORMAL) self.post_detail.delete('1.0', tkinter.END) self.post_detail.config(state=tkinter.DISABLED) self.save_history() self.clear_input() # 更新全部运单动态 def update_all_posts(self, event=None): update_all_posts = threading.Thread(target=self.update_all_posts_thread) update_all_posts.start() def update_all_posts_thread(self): pool = ThreadPool(4) posts = list(self.all_posts.values()) pool.map(self.update_post_detail, posts) pool.close() pool.join() self.save_history() # 更新单个运单状态 def update_post_detail(self, post=None): update_post_detail = threading.Thread(target=self.update_post_detail_thread) update_post_detail.start() def update_post_detail_thread(self, post=None): if not post: post = self.all_posts[self.posts.selection()[0]] with request.urlopen(self.query_url + 'type=' + post['company_code'] + '&postid=' + post['post_id'])\ as response: obj = json.loads(response.read().decode()) self.all_posts[post['post_id']]['status'] = obj['status'] if obj['status'] == '200': self.all_posts[post['post_id']]['data'] = obj['data'] self.all_posts[post['post_id']]['state'] = obj['state'] self.all_posts[post['post_id']]['last_update'] = obj['data'][0]['time'] else: self.all_posts[post['post_id']]['data'] = [{'time': '快递公司参数异常', 'context': '单号不存在或者已经过期'}] self.all_posts[post['post_id']]['state'] = '-1' self.all_posts[post['post_id']]['last_update'] = '' self.posts.item(post['post_id'], values=(post['note'], post['company_name'], self.state[post['state']], post['last_update'])) # 显示运单详情 def show_post_detail(self, event=None): selected_post = self.all_posts[self.posts.selection()[0]] self.post_id_var.set(selected_post['post_id']) self.post_note_var.set(selected_post['note']) self.post_company_name_var.set(selected_post['company_name']) self.post_detail.config(state=tkinter.NORMAL) # 允许编辑消息记录文本框 self.post_detail.delete('1.0', tkinter.END) for x in selected_post['data']: self.post_detail.insert('end', x['time'] + '\t' + x['context'] + '\n') self.post_detail.config(state=tkinter.DISABLED) # 禁止编辑消息记录文本框
urlList.append((name, pmUrl)) return urlList id =1 #视频个数 def write(): global id while id<10: url_name = get() for item in url_name: urllib.request.urlretrieve(item[1], 'video\\%s.mp4' % (item[0])) text.insert(END,str(id)+'.'+item[1]+'\n'+item[0]+'\n') url_name.pop(0) # 删除已经有的 id +=1 varl.set('视频抓取完毕!') def start(): thr = threading.Thread(target=write) thr.start() root = Tk() root.title('视频爬取1.0') #root.geometry('500x300')# 坐标,大小 text = ScrolledText(root,font=('微软雅黑', 10)) # 文本滚动条 text.grid() button = Button(root,text='开始爬取',font=('微软雅黑',10),command=start) # 按钮控件 button.grid() varl = StringVar() label = Label(root,font=('微软雅黑', 10),fg='red',textvariable = varl) label.grid() varl.set('熊猫已准备') root.mainloop()
class GenericGUI(elflab.abstracts.UIBase): # CONSTANTS DEFAULT_FOLDER = r"d:\data_dump" DEFAULT_FN = r"datalog" PATH_LENGTH = 50 FN_LENGTH = 20 VAR_NUM_FORMAT = "{}{}={:.5g}; " VAR_STR_FORMAT = "{}{}={}; " PARAM_LENGTH = 15 UI_REFRESH = 0.1 # Update ui every #seconds STATUS_REFRESH = 1.0 # Update the status frame every # seconds CONTROLLER_REFRESH = 5.0 # Update controller status every #seconds # default values to pass on to the kernel DEFAULT_PLOT_REFRESH_INTERVAL = 0.5 # Interval between plot refreshes in s DEFAULT_PLOT_LISTEN_INTERVAL = 0.05 # Interval between listening events in s def __init__(self, Kernel, Experiment, Controller=None, subplots=None): # subplots: overwrite if not None # 0=stoped, 1=running, 2=paused self.state = -1 # saving arguments self.Kernel = Kernel self.Experiment = Experiment self.Controller = Controller self.subplots = subplots self.params = Experiment.default_params.copy() if Experiment.param_order is None: self.param_order = list(self.params.keys()) else: self.param_order = Experiment.param_order self.var_order = Experiment.var_order self.var_titles = Experiment.var_titles # declare objects self.kernel = None self.experiment = None self.controller = None # setting gui root self.root = tk.Tk() try: title = "{}: {}".format(Kernel.title, Experiment.title) except Exception: title = "Undefined Kernel Title" self.root.title(title) # Declare containers self.folder_str = self.DEFAULT_FOLDER self.filename_var = tk.StringVar() self.filename_var.set(self.DEFAULT_FN) # Declare other variables self.controller_time = self.status_time = time.perf_counter() self.instrument_lock = multiprocessing.Lock() self.data_lock = multiprocessing.Lock() self.ui_lock = multiprocessing.Lock() self.controller_lock = multiprocessing.Lock() self.kernel_kwargs = { "plot_refresh_interval": self.DEFAULT_PLOT_REFRESH_INTERVAL, "plot_listen_interval": self.DEFAULT_PLOT_LISTEN_INTERVAL, "data_lock": self.data_lock, "instrument_lock": self.instrument_lock, } self.controller_kwargs = {} # Define styles style = ttk.Style() style.configure("RedFG.TButton", foreground="red") style.configure("GreenBG.TButton", background="green") # Define the scrolling frame self.ybar = ttk.Scrollbar(self.root, orient=tk.VERTICAL) self.ybar.grid(row=0, column=1, sticky="ns") self.xbar = ttk.Scrollbar(self.root, orient=tk.HORIZONTAL) self.xbar.grid(row=1, column=0, sticky="we") self.mainCanvas = tk.Canvas(self.root) self.mainCanvas.grid(row=0, column=0, sticky="nswe") self.root.columnconfigure(0, weight=1) self.root.rowconfigure(0, weight=1) self.mainFrame = ttk.Frame(self.mainCanvas) self.mainCanvas.create_window((0, 0), window=self.mainFrame, anchor=tk.NW) # Contents - layout frames self.fileFrame = ttk.LabelFrame(self.mainFrame, text="Data File") self.fileFrame.grid(row=0, column=0, columnspan=3, sticky="we") self.paramFrame = ttk.LabelFrame(self.mainFrame, text="Parameters") self.paramFrame.grid(row=1, column=0, rowspan=3, sticky="nswe") self.commentFrame = ttk.LabelFrame(self.mainFrame, text="comments") self.commentFrame.grid(row=1, column=1, sticky="nwe") self.commandFrame = ttk.LabelFrame(self.mainFrame, text="Program Control") self.commandFrame.grid(row=1, column=2, sticky="nwe") self.controlFrame = ttk.Frame(self.mainFrame, relief="solid") self.controlFrame.grid(row=2, column=1, columnspan=2, sticky="nwe", padx=5, pady=5) self.statusFrame = ttk.LabelFrame(self.mainFrame, text="status") self.statusFrame.grid(row=3, column=1, columnspan=2, sticky="nwe") # File options self.file_label1 = ttk.Label(self.fileFrame, text='file name: "(time stamp)_') self.file_label1.pack(side=tk.LEFT) self.file_entry = ttk.Entry(self.fileFrame, width=self.FN_LENGTH, textvariable=self.filename_var) self.file_entry.pack(side=tk.LEFT) self.file_label2 = ttk.Label(self.fileFrame, text='.dat"') self.file_label2.pack(side=tk.LEFT) self.folder_button = ttk.Button(self.fileFrame, text="directory", command=self.change_folder) self.folder_button.pack(side=tk.LEFT, padx=(32, 0)) self.folder_label = ttk.Label(self.fileFrame, width=self.PATH_LENGTH, justify=tk.LEFT) self.folder_label.pack(side=tk.LEFT) self.set_folder(self.folder_str) # Parameters self.param_vars = {} r = 0 for par in self.param_order: w = ttk.Label(self.paramFrame, text=par) w.grid(column=0, row=r, sticky="nw") self.param_vars[par] = tk.StringVar() self.param_vars[par].set(self.params[par]) w = ttk.Entry(self.paramFrame, width=self.PARAM_LENGTH, textvariable=self.param_vars[par]) w.grid(column=0, row=r + 1, sticky="nw", pady=(0, 8)) r += 2 # Comments box self.comment_button = ttk.Button( self.commentFrame, text="update", command=self.update_comment, state="disabled" ) self.comment_button.grid(row=0, column=0, sticky="nw") self.comment_box = ScrolledText(self.commentFrame, width=40, height=8) self.comment_box.insert(0.0, Experiment.default_comments) self.comment_box.grid(row=1, column=0, sticky="nw") # commands self.kernelLabel = ttk.Label( self.commandFrame, text="stopped", anchor=tk.CENTER, foreground="white", background="dim gray", relief="groove", ) self.kernelLabel.grid(column=1, row=1, sticky="ew") self.buttonStart = ttk.Button(self.commandFrame, text="start", command=self.start_kernel) self.buttonStart.grid(column=1, row=2, sticky="ew") self.buttonPause = ttk.Button(self.commandFrame, text="pause", command=self.pause_kernel, state="disabled") self.buttonPause.grid(column=1, row=3, sticky="ew") self.buttonQuit = ttk.Button(self.commandFrame, text="quit", style="RedFG.TButton", command=self.quit) self.buttonQuit.grid(column=1, row=4, sticky="ew") self.buttonPlot = ttk.Button(self.commandFrame, text="plot", command=self.kernel_plot, state="disabled") self.buttonPlot.grid(column=2, row=1, sticky="ew") self.buttonAutoOn = ttk.Button( self.commandFrame, text="autoscale: on", command=self.kernel_autoscaleOn, state="disabled" ) self.buttonAutoOn.grid(column=2, row=2, sticky="ew") self.buttonAutoOff = ttk.Button( self.commandFrame, text="autoscale: off", command=self.kernel_autoscaleOff, state="disabled" ) self.buttonAutoOff.grid(column=2, row=3, sticky="ew") self.buttonClear = ttk.Button( self.commandFrame, text="clear plots", command=self.kernel_clearPlot, state="disabled" ) self.buttonClear.grid(column=2, row=4, sticky="ew") for child in self.commandFrame.winfo_children(): child.grid_configure(padx=5, pady=5) # Status st = "" for var in self.var_order: st = self.VAR_STR_FORMAT.format(st, self.var_titles[var], "not available") self.statusLabel = ttk.Label(self.statusFrame, text=st, justify=tk.LEFT, foreground="blue") self.statusLabel.grid(sticky="nw") def quit(self): if self.kernel is not None: self.kernel.quit() if self.controller is not None: self.controller.terminate() self.root.quit() def start(self): # Calculate the wrapping length for status self.mainFrame.update() w = self.commentFrame.winfo_reqwidth() + self.commandFrame.winfo_reqwidth() - 1 self.statusLabel.configure(wraplength=w) # Update Frames and Define the scrolling self.mainFrame.update() self.mainCanvas.config( width=self.mainFrame.winfo_reqwidth(), height=self.mainFrame.winfo_reqheight(), scrollregion=(0, 0, self.mainFrame.winfo_reqwidth(), self.mainFrame.winfo_reqheight()), ) self.ybar.config(command=self.mainCanvas.yview) self.xbar.config(command=self.mainCanvas.xview) self.mainCanvas.config(xscrollcommand=self.xbar.set, yscrollcommand=self.ybar.set) # Start the gui self.root.after(0, self.update_interface) self.root.mainloop() def error_box(self, err): messagebox.showerror( "Error", "An error has occurred, try checking the values entered.\n error code:\n {}".format(err) ) def change_folder(self): folder = filedialog.askdirectory() self.set_folder(folder) def set_folder(self, folder): self.folder_str = folder l = len(folder) if l <= self.PATH_LENGTH: folder_txt = folder else: folder_txt = "...{}".format(self.folder_str[-self.PATH_LENGTH + 3 : l]) self.folder_label.config(text=folder_txt) def update_comment(self): with open(self.comments_file, "a") as f: f.write("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n") f.write("\nUPDATE:\n") f.write("Local time (YYYY/MM/DD, HH:MM:SS): {}\n".format(time.strftime("%Y/%m/%d, %H:%M:%S"))) f.write("____________________________________________________________\n") t = self.comment_box.get(0.0, tk.END) f.write(t) # Recursively disable / enable widgets def set_widget_state(self, w, state): if "frame" in w.winfo_class().lower(): for child in w.winfo_children(): self.set_widget_state(child, state) elif "text" not in w.winfo_class().lower(): w.configure(state=state) # Refresh UI according to the state def set_ui_state(self, state): with self.ui_lock: self.state = state # Disable / enable widgets if state > 0: s1 = "disable" s2 = "normal" self.buttonStart.configure(text="stop", style="GreenBG.TButton", command=self.stop_kernel) else: s1 = "normal" s2 = "disable" self.buttonStart.configure(text="start", style="TButton", command=self.start_kernel) self.set_widget_state(self.fileFrame, s1) self.set_widget_state(self.paramFrame, s1) self.comment_button.configure(state=s2) self.buttonPause.configure(state=s2) self.buttonPlot.configure(state=s2) self.buttonAutoOn.configure(state=s2) self.buttonAutoOff.configure(state=s2) self.buttonClear.configure(state=s2) self.set_widget_state(self.controlFrame, s2) # update state label if state == 0: self.kernelLabel.configure(text="stopped", foreground="white", background="dim gray") elif state == 1: self.kernelLabel.configure(text="running", background="green", foreground="white") self.buttonPause.configure(text="pause", style="TButton", command=self.pause_kernel) else: self.kernelLabel.configure(text="paused", background="yellow", foreground="") self.buttonPause.configure(text="resume", style="GreenBG.TButton", command=self.resume_kernel) def start_kernel(self): try: # Read parameters for par in self.params: self.params[par] = self.param_vars[par].get() if self.kernel is not None: self.kernel.quit() # Parse file names, and create the comments file filename = self.filename_var.get() timestring = time.strftime("%Y.%m.%d_%H.%M.%S") self.data_file = os.path.join(self.folder_str, "{0}_{1}.dat".format(timestring, filename)) self.comments_file = os.path.join(self.folder_str, "{0}_{1}_comments.txt".format(timestring, filename)) with open(self.comments_file, "w") as f: f.write('experiment: "{}"\n'.format(self.Experiment.title)) f.write("Local time (YYYY/MM/DD, HH:MM:SS): {}\n".format(time.strftime("%Y/%m/%d, %H:%M:%S"))) f.write("____________________________________________________________\n") t = self.comment_box.get(0.0, tk.END) f.write(t) f.write("\n\nParameters:\n") for par in self.param_order: f.write(" {} = {}\n".format(par, self.params[par])) # Start the experiment and the kernel self.experiment = self.Experiment(params=self.params, filename=self.data_file) if self.subplots is not None: self.experiment.plotXYs = self.subplots self.kernel = self.Kernel(self.experiment, **self.kernel_kwargs) self.kernel.start() # Restart a controller instance if self.controller is not None: with self.controller_lock: self.controller.terminate() if self.Controller is not None: self.controller = self.Controller(kernel=self.kernel, **self.controller_kwargs) self.update_controller() except Exception as err: self.error_box(err) print(traceback.format_exc()) else: with self.ui_lock: self.buttonStart.configure(text="stop", style="GreenBG.TButton", command=self.stop_kernel) def stop_kernel(self): self.kernel.stop() def pause_kernel(self): self.kernel.pause() with self.ui_lock: self.buttonPause.configure(text="resume", style="GreenBG.TButton", command=self.resume_kernel) def resume_kernel(self): self.kernel.resume() with self.ui_lock: self.buttonPause.configure(text="pause", style="TButton", command=self.pause_kernel) def kernel_plot(self): self.kernel.plot() def kernel_autoscaleOn(self): self.kernel.autoscaleOn() def kernel_autoscaleOff(self): self.kernel.autoscaleOff() def kernel_clearPlot(self): self.kernel.clearPlot() # book keeping: update the controller status def update_controller(self): self.controller_time = time.perf_counter() def update_status(self): st = "" with self.data_lock: for var in self.var_order: v = self.kernel.current_values[var] if isinstance(v, float): st = self.VAR_NUM_FORMAT.format(st, self.var_titles[var], v) else: st = self.VAR_STR_FORMAT.format(st, self.var_titles[var], v) with self.ui_lock: self.statusLabel.configure(text=st) self.status_time = time.perf_counter() # book keeping: update the interface def update_interface(self): if (self.kernel is None) or self.kernel.flag_stop or self.kernel.flag_quit: new_state = 0 elif self.kernel.flag_pause: new_state = 2 else: new_state = 1 if new_state != self.state: self.set_ui_state(new_state) t = time.perf_counter() if (self.state > 0) and (t - self.status_time > self.STATUS_REFRESH): self.update_status() if (self.state > 0) and (t - self.controller_time > self.CONTROLLER_REFRESH): self.update_controller() self.root.after(round(self.UI_REFRESH * 1000.0), self.update_interface)
class CmdlAppGui(): def __init__(self, title, cb_input): self.title = title self.cb_input = cb_input # the callback function for user input self.here = False # the gui is not here, yet self.root = tk.Tk() self.root.title(title) self.frm = ttk.Frame(master=self.root, padding="3 3 12 12") self.build(self.frm) self.here = True def start(self): self.frm.mainloop() self.here = False # the gui is no longer here def put_msg(self, text, style=0): # display user mesages in the left window if self.here: if style == 1: self.scrollmsg.insert(tk.INSERT, text, 'bold') else: self.scrollmsg.insert(tk.INSERT, text, '') self.scrollmsg.yview_scroll(99,'pages') else: print("GUI msg: {0}".format(text)) def put_data(self, text, style=0): # display user data in the right window if self.here: if style == 1: self.scrolldata.insert(tk.INSERT, text, 'bold') else: self.scrolldata.insert(tk.INSERT, text, '') self.scrolldata.yview_scroll(99,'pages') else: print("GUI data: {0}".format(text)) def build(self, frm): # layout of the gui elements frm.grid(column=0, row=0, sticky=(tk.N, tk.W, tk.E, tk.S)) frm.columnconfigure(0, weight=1) frm.columnconfigure(1, weight=2) frm.rowconfigure(0, weight=1) self.scrollmsg = ScrolledText(frm, wrap=tk.WORD, width=40) self.scrollmsg.grid(column=0, row=1, sticky="EW") self.scrollmsg.tag_config('bold', font=('Courier',10,'bold')) self.scrolldata = ScrolledText(frm, wrap=tk.WORD, width=40) self.scrolldata.grid(column=1, row=1, rowspan=9, sticky="NS") self.scrolldata.tag_config('bold', font=('Courier',10,'bold')) self.entrytext = tk.StringVar() self.entry = ttk.Entry(frm, textvariable=self.entrytext) self.entry.grid(column=0, row=3, sticky='EW') self.entry.bind("<Return>", self.on_press_enter) btn_quit = ttk.Button(frm, text="QUIT", command=self.finish) btn_quit.grid(column=0, row=9, sticky="EW") for child in frm.winfo_children(): child.grid_configure(padx=5, pady=5) self.entry.focus_set() # set the focus on the entry field def on_press_enter(self, event): # react to the enter key: send the text input to the callback function text = self.entrytext.get() self.cb_input(text) if self.here: self.entrytext.set('') self.entry.focus_set() # set the focus on the entry field def finish(self): # program call to terminate GUI self.here = False self.entry.unbind("<Return>") self.root.destroy()
class OptimizerMainWindow: """ classdocs """ # TODO: change that name def reactToClick(self, event): a = AddRestrictionDialog(self) def __init__(self, optimizer): # always have a reference to model/controller self.optimizer = optimizer # setup main GUI and make stretchable self.guiRoot = Tk() self.guiRoot.title("OPTIMIZR") self.guiRoot.columnconfigure(1, weight=1) self.guiRoot.rowconfigure(0, weight=1) # left (settings) and right (sequences) part self.frameLeft = Frame(self.guiRoot) self.frameLeft.grid(row=0, column=0, sticky=W + E + N + S) self.frameLeft.columnconfigure(0, weight=1) self.frameRight = Frame(self.guiRoot) self.frameRight.grid(row=0, column=1, sticky=W + E + N + S) self.frameRight.columnconfigure(0, weight=1) self.frameRight.rowconfigure(0, weight=1) self.frameRight.rowconfigure(1, weight=1) self.frameSpeciesControll = LabelFrame(self.frameLeft, text="Species", pady=10, padx=10) self.frameSpeciesControll.columnconfigure(1, weight=1) self.frameOptimizationControll = LabelFrame(self.frameLeft, text="Optimization", pady=10, padx=10) self.frameRestrictionControll = LabelFrame(self.frameLeft, text="Restriction Enzymes", pady=10, padx=10) self.frameSpeciesControll.grid(row=0, column=0, sticky=W + E, padx=10, pady=10) self.frameOptimizationControll.grid(row=1, column=0, sticky=W + E, padx=10, pady=10) self.frameRestrictionControll.grid(row=2, column=0, sticky=W + E, padx=10, pady=10) # Species Controll Label(self.frameSpeciesControll, text="Source:").grid(row=0, column=0) Label(self.frameSpeciesControll, text="Target:").grid(row=1, column=0) self.comboSourceSpecies = Combobox(self.frameSpeciesControll, state="readonly") self.comboSourceSpecies.grid(row=0, column=1, pady=5, sticky="ew") self.comboTargetSpecies = Combobox(self.frameSpeciesControll, state="readonly") self.comboTargetSpecies.grid(row=1, column=1, pady=5, sticky="we") self.buttonSpeciesList = Button(self.frameSpeciesControll, text="Edit Species List") self.buttonSpeciesList.grid(row=2, column=1, pady=5, sticky="e") self.comboSourceSpecies.bind("<<ComboboxSelected>>", self.actionOptimizerSettingsChanged) self.comboTargetSpecies.bind("<<ComboboxSelected>>", self.actionOptimizerSettingsChanged) # Optimization Controll Label(self.frameOptimizationControll, text="Optimization Strategy:").grid(row=0, column=0) self.comboOptimizationStrategy = Combobox(self.frameOptimizationControll, state="readonly") self.comboOptimizationStrategy.grid(row=0, column=1) self.comboOptimizationStrategy["values"] = self.optimizer.possibleOptimizationStrategies self.comboOptimizationStrategy.bind("<<ComboboxSelected>>", self.actionOptimizerSettingsChanged) # Restriction Enzymes self.listRestriction = Listbox(self.frameRestrictionControll) self.listRestriction.grid(row=0, column=0, columnspan=3, pady=5, sticky=W + E) self.frameRestrictionControll.columnconfigure(0, weight=1) self.buttonRestricionAdd = Button(self.frameRestrictionControll, text=" + ") self.buttonRestricionDel = Button(self.frameRestrictionControll, text=" - ") self.buttonRestricionAdd.grid(row=1, column=1, padx=5) self.buttonRestricionDel.grid(row=1, column=2, padx=5) # Source Sequence Frame self.frameSourceSequence = LabelFrame(self.frameRight, text="Source Sequence", padx=10, pady=10) self.frameResultSequence = LabelFrame(self.frameRight, text="Result Sequence", padx=10, pady=10) self.frameSourceSequence.grid(row=0, column=0, sticky="wens", padx=10, pady=10) self.frameResultSequence.grid(row=1, column=0, sticky="wens", padx=10, pady=10) self.buttonSourceLoad = Button(self.frameSourceSequence, text=" Load ") self.textSourceSeq = ScrolledText(self.frameSourceSequence, height=10) self.buttonSourceLoad.grid(row=0, column=1, sticky="e", pady=5) self.textSourceSeq.grid(row=1, column=0, columnspan=2, sticky="wens") self.frameSourceSequence.columnconfigure(0, weight=1) self.frameSourceSequence.rowconfigure(1, weight=1) self.textSourceSeq.frame.columnconfigure(1, weight=1) self.textSourceSeq.frame.rowconfigure(0, weight=1) self.buttonOptimize = Button(self.frameResultSequence, text=" OPTIMIZE! ") self.buttonOptimize.bind("<ButtonRelease>", self.actionOptimize) self.buttonRemoveRestriction = Button(self.frameResultSequence, text=" RESTRICTION-B-GONE! ") self.buttonRemoveRestriction.bind("<ButtonRelease>", self.actionRemoveRestricion) self.buttonSaveResult = Button(self.frameResultSequence, text=" Save ") self.textResultSequence = ScrolledText(self.frameResultSequence, height=10) self.buttonOptimize.grid(column=0, row=0, pady=5, sticky="w") self.buttonRemoveRestriction.grid(column=1, row=0, pady=5, padx=10, sticky="w") self.textResultSequence.grid(row=1, column=0, columnspan=4, sticky="wens") self.buttonSaveResult.grid(row=2, column=3, pady=5, sticky="e") self.frameResultSequence.columnconfigure(2, weight=1) self.frameResultSequence.rowconfigure(1, weight=1) self.textResultSequence.frame.columnconfigure(1, weight=1) self.textResultSequence.frame.rowconfigure(0, weight=1) self.textSourceSeq.bind("<<Modified>>", self.actionSequenceModified) self.textResultSequence.bind("<<Modified>>", self.actionSequenceModified) # generate color tags for textboxes for i in range(101): # green for normal codons (r, g, b) = colorsys.hsv_to_rgb(210 / 360, i / 100, 1.0) colorHex = "#%02x%02x%02x" % (int(r * 255), int(g * 255), int(b * 255)) self.textSourceSeq.tag_config("normal" + str(i), background=colorHex) self.textResultSequence.tag_config("normal" + str(i), background=colorHex) # red for codons with restriction sites (r, g, b) = colorsys.hsv_to_rgb(5 / 360, i / 100, 1.0) colorHex = "#%02x%02x%02x" % (int(r * 255), int(g * 255), int(b * 255)) self.textSourceSeq.tag_config("restrict" + str(i), background=colorHex) self.textResultSequence.tag_config("restrict" + str(i), background=colorHex) # Set (minimum + max) Window size self.guiRoot.update() self.guiRoot.minsize(self.guiRoot.winfo_width(), self.guiRoot.winfo_height()) self.buttonRestricionAdd.bind("<ButtonRelease>", self.reactToClick) self.buttonRestricionDel.bind("<ButtonRelease>", self.actionRestrictionEnzymeDelete) self.buttonSpeciesList.bind("<ButtonRelease>", self.actionEditSpeciesButton) self.buttonSourceLoad.bind("<ButtonRelease>", self.actionLoadSequence) self.buttonSaveResult.bind("<ButtonRelease>", self.actionSaveSequence) # TEST # self.listRestriction.insert("end", "EcoRI") # self.listRestriction.insert("end", "BamHI") # # dummy event to manually trigger update self.guiRoot.bind("<<Update>>", self.actionUpdate) self.actionUpdate(None) self.guiRoot.mainloop() def actionRestrictionEnzymeDelete(self, event): try: selectedEnzyme = self.listRestriction.selection_get() self.optimizer.restrictionEnzymeList.remove(selectedEnzyme) self.guiRoot.event_generate("<<Update>>") except tkinter.TclError: # no selection pass def actionUpdate(self, event): # print("update called") # clear list of restriction enzymes self.listRestriction.delete(0, "end") for r in self.optimizer.restrictionEnzymeList: self.listRestriction.insert("end", r) self.comboSourceSpecies.delete(0, "end") self.comboTargetSpecies.delete(0, "end") speciesValues = list() for (taxid, name) in self.optimizer.speciesList: speciesValues.append(taxid + ": " + name) self.comboSourceSpecies["values"] = speciesValues self.comboTargetSpecies["values"] = speciesValues if self.comboSourceSpecies.get() not in speciesValues: self.comboSourceSpecies.set("") if self.comboTargetSpecies.get() not in speciesValues: self.comboTargetSpecies.set("") self.textSourceSeq.edit_modified(True) self.textResultSequence.edit_modified(True) self.optimizer.saveConfig("config.ini") def actionEditSpeciesButton(self, event): speciesListDialog = SpeciesListDialog(self) def actionOptimizerSettingsChanged(self, event=None): # print("Something happened") strategy = self.comboOptimizationStrategy.get() sourceString = self.comboSourceSpecies.get() targetString = self.comboTargetSpecies.get() if not (strategy and sourceString and targetString): return sourceTaxid = sourceString.split(":")[0] targetTaxid = targetString.split(":")[0] self.optimizer.setOptimizer(sourceTaxid, targetTaxid, strategy) self.textSourceSeq.edit_modified(True) self.textResultSequence.edit_modified(True) # self.optimizer.testPrint() def actionOptimize(self, event=None): self.optimizer.runOptimization() self.textSourceSeq.edit_modified(True) self.textResultSequence.edit_modified(True) def actionRemoveRestricion(self, event=None): self.optimizer.runRestricionRemoval() self.textSourceSeq.edit_modified(True) self.textResultSequence.edit_modified(True) def actionSequenceModified(self, event=None): # necessary if, otherwise -> infinite loop if self.textSourceSeq.edit_modified(): seq = self.textSourceSeq.get("1.0", "end").strip() seq = stripCharsNotInList(seq.upper(), ["A", "C", "G", "T"]) self.optimizer.setSourceSeq(seq) oldInsert = self.textSourceSeq.index("insert") self.textSourceSeq.delete("1.0", "end") sourceCodons = self.optimizer.getCodonsForPrint(True) if not sourceCodons: self.textSourceSeq.insert("end", self.optimizer.sourceSequence) else: for (co, sc, r) in sourceCodons: if sc: if not r: self.textSourceSeq.insert("end", co, "normal" + str(int(sc * 100))) # print("normal"+str(int(sc*100))) else: self.textSourceSeq.insert("end", co, "restrict" + str(int(sc * 100))) else: # remainder without color self.textSourceSeq.insert("end", co) self.textSourceSeq.mark_set("insert", oldInsert) # reset the modified status at the very end self.textSourceSeq.edit_modified(False) if self.textResultSequence.edit_modified(): seq = self.textResultSequence.get("1.0", "end").strip() # self.optimizer.setOptimizedSeq(seq) oldInsert = self.textResultSequence.index("insert") self.textResultSequence.delete("1.0", "end") targetCodons = self.optimizer.getCodonsForPrint(False) if not targetCodons: self.textSourceSeq.insert("end", self.optimizer.optimizedSequence) else: for (co, sc, r) in targetCodons: if sc: if not r: self.textResultSequence.insert("end", co, "normal" + str(int(sc * 100))) # print("normal"+str(int(sc*100))) else: self.textResultSequence.insert("end", co, "restrict" + str(int(sc * 100))) else: # remainder without color self.textResultSequence.insert("end", co) self.textSourceSeq.mark_set("insert", oldInsert) self.textResultSequence.edit_modified(False) def actionLoadSequence(self, event=None): filename = tkinter.filedialog.askopenfilename() if filename: seq = sequenceIO.readFile(filename) self.textSourceSeq.delete("1.0", "end") self.textSourceSeq.insert("end", seq) self.textSourceSeq.edit_modified(True) def actionSaveSequence(self, event=None): filename = tkinter.filedialog.asksaveasfilename() if filename: # print("file is " + filename) with open(filename, mode="w") as fd: fd.write(self.optimizer.optimizedSequence)
class AppGUI(Frame): def __init__(self, master=None): # Avoiding to send it continuously. self.lock = False Frame.__init__(self, master) self.grid() self.master = master # Setting for ComboBox. self.url_lang_combobox_str = StringVar() self.url_lang_combobox_list = lang_list # UI components. self.receiver_email_text = Label(self, text="Receiver:") self.receiver_email_field = Entry(self, width=50) self.subject_text = Label(self, text='Subject:') self.subject_field = Entry(self, width=50) self.receiver_name_text = Label(self, text='Name:') self.receiver_name_field = Entry(self, width=50) self.url_lang_text = Label(self, text='Link lang:') self.url_lang_combobox = Combobox(self, textvariable=self.url_lang_combobox_str, values=self.url_lang_combobox_list, state='readonly') self.send_progressbar = Progressbar(self, orient='horizontal', length=500, mode='determinate', maximum=300) self.send_button = Button(self, text='Send', command=self._send_mail) self.quit_button = Button(self, text='Exit', command=self.__exit) self.log_msg_text = ScrolledText(self) # Attachment. self.mail_attachment_list = attachment_list[:] self.url_lang_link_title = None self.url_lang_link = copy.deepcopy(content_link) # Mailer self._mailer = None # Let Mailer can control components. Mailer.window_content = self self.__create_widgets() def _send_mail(self): if not self.lock: threading.Thread(target=self.__send_mail).start() else: messagebox.showinfo('Warning', "Now it's processing...") def _choose(self, event): # arr = self.url_lang_link.get(self.url_lang_combobox_str.get()) # Get the array by choosing language. pass def _modify_content_url_link(self): link_arr = self.url_lang_link.get(self.url_lang_combobox_str.get()) content = self._mailer.content for index in range(len(link_arr)): content_index = content.index(self.url_lang_link_title[index]) + len(self.url_lang_link_title[index]) content = content[:content_index] + '\n' + link_arr[index] + content[content_index:] self._mailer.content = content return False def _make_mailer(self): self.mail_attachment_list = attachment_list[:] # Clone a list. if atta_lang_list[self.url_lang_combobox.current()]: for i in range(len(self.mail_attachment_list)): # Only from the third file to the end file can change language. if i > 2: # Modify the file name. att = self.mail_attachment_list[i].split('.') self.mail_attachment_list[i] = ''.join([' ', atta_lang_list[self.url_lang_combobox.current()], '.']).join(att) # ** IMPORTANT, we set the content path here!! path = 'content.docx' if self.url_lang_combobox.get() == lang_list[2] or self.url_lang_combobox.get() == lang_list[3]: path = 'content chinese.docx' if debug_log: print(self.mail_attachment_list) # ** IMPORTANT, we have to new an object here. Otherwise, we couldn't check the error checking. return Mailer(content_path=path, attachment_list=self.mail_attachment_list) def __create_widgets(self): """ Construct all of the UI components. """ self.receiver_email_text.grid(row=0, column=0) self.receiver_email_field.grid(row=0, column=1, columnspan=6) self.subject_text.grid(row=1, column=0) self.subject_field.grid(row=1, column=1, columnspan=6) self.subject_field.insert(0, 'Osaka Mariko Apartment Location & Condition') self.receiver_name_text.grid(row=2, column=0) self.receiver_name_field.grid(row=2, column=1, columnspan=6) self.url_lang_text.grid(row=3, column=0) self.url_lang_combobox.grid(row=3, column=2, columnspan=2) self.send_progressbar.grid(row=4, column=0, columnspan=7) self.send_button.grid(row=5, column=2) self.quit_button.grid(row=5, column=3) self.log_msg_text.grid(row=6, column=0, columnspan=7) # Default setting. self.url_lang_combobox.current(0) self.url_lang_combobox.bind("<<ComboboxSelected>>", self._choose) def __exit(self): if not self.lock: self.log_msg_text.insert(END, '\n\n -- Bye Bye --\n') self.master.quit() else: messagebox.showinfo('Error', "Now it's processing...please wait it ;)") @DecoratorThreadLockerApp() @DecoratorErrorCheckAndInitApp() def __send_mail(self): self.send_progressbar.start() # Start processing the progress. ending = 'Welcome to use my application :)' if self._mailer.send_mail() \ else '** Your sending was failed :( please send it again!' self.log_msg_text.insert(END, ending) self.send_progressbar.stop() # Stop processing the progress.