patternpythonMinor
Python Tkinter OOPS code optimization
Viewed 0 times
oopstkinteroptimizationpythoncode
Problem
I have the following oops code, I am also monitoring user activity to see if it is idle for more than 5 seconds. I am very new to oops, so just want to understand if there are better way to implement it.
```
#!/usr/bin/python
import Tkinter
import time
class simpleapp_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.running = None
self.initialize()
def initialize(self):
self.grid()
self.entryVariable = Tkinter.StringVar()
self.entry = Tkinter.Entry(self,textvariable=self.entryVariable)
self.entry.grid(column=0,row=0,sticky='EW')
self.entry.bind("", self.OnPressEnter)
self.entryVariable.set(u"Enter text here.")
button = Tkinter.Button(self,text=u"Click me !",
command=self.OnButtonClick)
button.grid(column=1,row=0)
self.labelVariable = Tkinter.StringVar()
label = Tkinter.Label(self,textvariable=self.labelVariable,
anchor="w",fg="white",bg="blue")
label.grid(column=0,row=1,columnspan=2,sticky='EW')
self.labelVariable.set(u"Hello !")
self.grid_columnconfigure(0,weight=1)
self.resizable(True,False)
self.update()
self.geometry(self.geometry())
self.entry.focus_set()
self.entry.selection_range(0, Tkinter.END)
self.after(1000, self.tick)
self.eventbind()
def OnButtonClick(self):
self.labelVariable.set( self.entryVariable.get()+" (You clicked the button)" )
self.entry.focus_set()
self.entry.selection_range(0, Tkinter.END)
def OnPressEnter(self,event):
self.labelVariable.set( self.entryVariable.get()+" (You pressed ENTER)" )
self.entry.focus_set()
self.entry.selection_range(0, Tkinter.END)
def reset(self, *ignore):
self.running = None
def tick(self, *ignore):
if not se
```
#!/usr/bin/python
import Tkinter
import time
class simpleapp_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.running = None
self.initialize()
def initialize(self):
self.grid()
self.entryVariable = Tkinter.StringVar()
self.entry = Tkinter.Entry(self,textvariable=self.entryVariable)
self.entry.grid(column=0,row=0,sticky='EW')
self.entry.bind("", self.OnPressEnter)
self.entryVariable.set(u"Enter text here.")
button = Tkinter.Button(self,text=u"Click me !",
command=self.OnButtonClick)
button.grid(column=1,row=0)
self.labelVariable = Tkinter.StringVar()
label = Tkinter.Label(self,textvariable=self.labelVariable,
anchor="w",fg="white",bg="blue")
label.grid(column=0,row=1,columnspan=2,sticky='EW')
self.labelVariable.set(u"Hello !")
self.grid_columnconfigure(0,weight=1)
self.resizable(True,False)
self.update()
self.geometry(self.geometry())
self.entry.focus_set()
self.entry.selection_range(0, Tkinter.END)
self.after(1000, self.tick)
self.eventbind()
def OnButtonClick(self):
self.labelVariable.set( self.entryVariable.get()+" (You clicked the button)" )
self.entry.focus_set()
self.entry.selection_range(0, Tkinter.END)
def OnPressEnter(self,event):
self.labelVariable.set( self.entryVariable.get()+" (You pressed ENTER)" )
self.entry.focus_set()
self.entry.selection_range(0, Tkinter.END)
def reset(self, *ignore):
self.running = None
def tick(self, *ignore):
if not se
Solution
Tkinter is not just OOP, it's about http://en.wikipedia.org/wiki/Event-driven_programming . The code you posted does not yet show enough to be judged, because it's too small and the application purpose is not yet clearly visible. When code will grow, you will need to decompose it into modules, but it is good to think about the strategy before hand.
Tkinter allows to process events in event-driven style, so it's hard to see why do you need "a tick" to check if a user presses something. (I am not sure, may be it is intended this way).
One more note I can make is about style. Take alook at http://www.python.org/dev/peps/pep-0008/ It's not very important, but makes the code look much nicer.
UPDATE: MVC (model-view-controller) is very natural approach for Tkinter (as is the case with other GUI frameworks). Please, take a look at toy MVC (link from an answer to https://stackoverflow.com/questions/7638139/python-tk-with-mvc-pattern)
Tkinter allows to process events in event-driven style, so it's hard to see why do you need "a tick" to check if a user presses something. (I am not sure, may be it is intended this way).
One more note I can make is about style. Take alook at http://www.python.org/dev/peps/pep-0008/ It's not very important, but makes the code look much nicer.
UPDATE: MVC (model-view-controller) is very natural approach for Tkinter (as is the case with other GUI frameworks). Please, take a look at toy MVC (link from an answer to https://stackoverflow.com/questions/7638139/python-tk-with-mvc-pattern)
Context
StackExchange Code Review Q#31582, answer score: 3
Revisions (0)
No revisions yet.