How to resolve the algorithm GUI component interaction step by step in the Python programming language
How to resolve the algorithm GUI component interaction step by step in the Python programming language
Table of Contents
Problem Statement
Almost every application needs to communicate with the user in some way. Therefore, a substantial part of the code deals with the interaction of program logic with GUI components. Typically, the following is needed:
For a minimal "application", write a program that presents a form with three components to the user:
The field is initialized to zero. The user may manually enter a new value into the field, or increment its value with the "increment" button. Entering a non-numeric value should be either impossible, or issue an error message. Pressing the "random" button presents a confirmation dialog, and resets the field's value to a random value if the answer is "Yes". (This task may be regarded as an extension of the task Simple windowed application).
Let's start with the solution:
Step by Step solution about How to resolve the algorithm GUI component interaction step by step in the Python programming language
First code:
- It imports random and Tkinter modules.
window
is a Tkinter window object.options
is a dictionary used to set padding for widgets.s
is a StringVar object used to store the value of the entry widget.increase()
function increments the value of the entry widget by 1.rand()
function resets the value of the entry widget to a random value between 0 and 4999 after asking for confirmation from the user.update()
function is called when a key is pressed in the entry widget. It checks if the key pressed is a digit and if not, it shows an error message.e
is an Entry widget used to display and edit the value ofs
.b1
andb2
are Button widgets used to callincrease()
andrand()
functions respectively.mainloop()
is called to start the event loop for the window.
Second code:
- It imports random, tkinter module, and tkinter.messagebox module.
window
is a Tkinter window.options
is a dictionary used to set padding for widgets.s
is a StringVar object used to store the value of the entry widget.increase()
function increments the value of the entry widget by 1.rand()
function resets the value of the entry widget to a random value between 0 and 4999 after asking for confirmation from the user.update()
function is called when a key is pressed in the entry widget. It checks if the key pressed is a digit and if not, it shows an error message.e
is an Entry widget used to display and edit the value ofs
.b1
andb2
are Button widgets used to callincrease()
andrand()
functions respectively.mainloop()
is called to start the event loop for the window.
Third code:
- It imports random and Tkinter modules.
- It also imports tkMessageBox submodule from tkinter module.
Application
class is defined which inherits from theFrame
class.- In the
__init__()
method of theApplication
class, the counter is set to 0, thecontents
variable is a StringVar object used to store the value of the entry widget,increment()
andrandom()
functions are defined, andcreate_widgets()
method is called. increment()
function increments the counter by 1 and updates the entry widget.random()
function asks for confirmation from the user and if confirmed, resets the counter to a random value between 0 and 5000.entry_updated()
function checks if the key pressed is a digit and if not, it shows an error message.update_entry()
function updates the entry widget with the current value of the counter.create_widgets()
function creates the entry widget, increment and random buttons, and packs them.- In the
if __name__ == '__main__'
block, the main program is run andApplication
class is instantiated and itsmainloop()
method is called.
Source code in the python programming language
import random, tkMessageBox
from Tkinter import *
window = Tk()
window.geometry("300x50+100+100")
options = { "padx":5, "pady":5}
s=StringVar()
s.set(1)
def increase():
s.set(int(s.get())+1)
def rand():
if tkMessageBox.askyesno("Confirmation", "Reset to random value ?"):
s.set(random.randrange(0,5000))
def update(e):
if not e.char.isdigit():
tkMessageBox.showerror('Error', 'Invalid input !')
return "break"
e = Entry(text=s)
e.grid(column=0, row=0, **options)
e.bind('<Key>', update)
b1 = Button(text="Increase", command=increase, **options )
b1.grid(column=1, row=0, **options)
b2 = Button(text="Random", command=rand, **options)
b2.grid(column=2, row=0, **options)
mainloop()
import random, tkinter.messagebox
from tkinter import *
window = Tk()
window.geometry("330x50+100+100")
options = { "padx":5, "pady":5}
s=StringVar()
s.set(1)
def increase():
s.set(int(s.get())+1)
def rand():
if messagebox.askyesno("Confirmation", "Reset to random value ?"):
s.set(random.randrange(0,5000))
def update(e):
if not e.char.isdigit():
messagebox.showerror('Error', 'Invalid input !')
return "break"
e = Entry(text=s)
e.grid(column=0, row=0, **options)
e.bind('<Key>', update)
b1 = Button(text="Increase", command=increase, **options )
b1.grid(column=1, row=0, **options)
b2 = Button(text="Random", command=rand, **options)
b2.grid(column=2, row=0, **options)
mainloop()
import random
from Tkinter import *
import tkMessageBox
class Application(Frame):
def __init__(self, master):
Frame.__init__(self, master)
self.counter = 0
self.contents = StringVar()
self.contents.set(str(self.counter))
self.pack(expand=True, fill='both', padx=10, pady=15)
self.create_widgets()
def increment(self, *args):
self.counter += 1
self.update_entry()
def random(self):
if tkMessageBox.askyesno("Confirmation", "Reset to random value ?"):
self.counter = random.randint(0, 5000)
self.update_entry()
def entry_updated(self, event, *args):
if not event.char:
return 'break'
if not event.char.isdigit():
tkMessageBox.showerror('Error', 'Invalid input !')
return 'break'
self.counter = int('%s%s' % (self.contents.get(), event.char))
def update_entry(self):
self.contents.set(str(self.counter))
self.entry['textvariable'] = self.contents
def create_widgets(self):
options = {'expand': True, 'fill': 'x', 'side': 'left', 'padx': 5}
self.entry = Entry(self)
self.entry.bind('<Key>', self.entry_updated)
self.entry.pack(**options)
self.update_entry()
self.increment_button = Button(self, text='Increment', command=self.increment)
self.increment_button.pack(**options)
self.random_button = Button(self, text='Random', command=self.random)
self.random_button.pack(**options)
if __name__ == '__main__':
root = Tk()
try:
app = Application(master=root)
app.master.title("Rosetta code")
app.mainloop()
except KeyboardInterrupt:
root.destroy()
You may also check:How to resolve the algorithm Solve a Hopido puzzle step by step in the C# programming language
You may also check:How to resolve the algorithm Mandelbrot set step by step in the GLSL programming language
You may also check:How to resolve the algorithm Church numerals step by step in the Quackery programming language
You may also check:How to resolve the algorithm Sorting algorithms/Counting sort step by step in the R programming language
You may also check:How to resolve the algorithm Abundant, deficient and perfect number classifications step by step in the Forth programming language