Sinisterly
GUI Regex Tester - Printable Version

+- Sinisterly (https://sinister.ly)
+-- Forum: Coding (https://sinister.ly/Forum-Coding)
+--- Forum: Python (https://sinister.ly/Forum-Python)
+--- Thread: GUI Regex Tester (/Thread-GUI-Regex-Tester)



GUI Regex Tester - Inori - 01-22-2016

I'm trying to familiarize myself with the Tkinter and ttk libraries, so I built a simple regex tester with them. Cool bonus feature of a button that opens the docpage on regex, too.
Only command line option is a --debug flag to, well, enable debugging.

Tip: use chmod +x regextester.py to run the program as an executeable

Source:
Code:
import re import ttk from sys import argv from Tkinter import * from webbrowser import open as redir def popup(): if debug: print 'DEBUG:\tOpening regex doc in default browser' redir('https://docs.python.org/2/library/re.html',new=2,autoraise=True) class Main(): def __init__(self): #document root self.root=Tk() self.root.title('Python Regex tester') #frames self.in_frame=ttk.Frame(self.root,padding='3 3 3 3') self.in_frame.grid(column=0,row=0,sticky=(N,W,E,S)) self.in_frame.columnconfigure(0,weight=1) self.in_frame.rowconfigure(0,weight=1) self.out_frame=ttk.Frame(self.root,padding='3 3 3 3') self.out_frame.grid(column=0,row=1,sticky=(N,W,E,S)) self.out_frame.columnconfigure(0,weight=1) self.out_frame.rowconfigure(0,weight=1) #variables self.sampleText=StringVar() self.pattern=StringVar() #pattern label pattern_label=ttk.Label(self.in_frame,text='regex pattern') pattern_label.grid(column=1,row=1,sticky=(E,N,W)) #sample label sample_label=ttk.Label(self.in_frame,text='sample input') sample_label.grid(column=3,row=1,sticky=(N,W)) #pattern entry self.pattern_entry=ttk.Entry(self.in_frame,width=15,textvariable=self.pattern) self.pattern_entry.grid(column=1,row=2,sticky=(N,W)) #spacers ttk.Label(self.in_frame,text=' ').grid(column=2,row=2) #sample entry sample_entry=ttk.Entry(self.in_frame,width=15,textvariable=self.sampleText) sample_entry.grid(column=3,row=2,sticky=(N,W)) #execute button ex_button=ttk.Button(self.out_frame,text='test',command=self.test) ex_button.grid(column=0,row=1,sticky=(N)) #output entry self.output_entry=ttk.Entry(self.out_frame) self.output_entry.grid(column=0,row=2,sticky=(N,E,W,S)) #refernce button ref_button=ttk.Button(self.out_frame,text='refernce',command=popup) ref_button.grid(column=0,row=3,sticky=(E)) #final operations self.pattern_entry.focus() self.root.bind('<Return>',self.test) #test method def test(self,*args): try: p=re.compile(self.pattern.get()) r=p.findall(self.sampleText.get()) if debug: print 'DEBUG:\tFound %s for %s in %s'%(r,self.pattern.get(),self.sampleText.get()) self.output_entry.delete(0,END) self.output_entry.insert(0,', '.join(r)) except ValueError: pass def run(self): self.root.mainloop() debug=False if len(argv)>1: if argv[1]=='--debug': debug=True print 'DEBUG:\tDebugging enabled' window=Main() window.run()