#!/usr/bin/env python
import tkinter as tk
import tkinter.messagebox as messagebox
#############
# paintman - sanitised code sample demonstrating bug.
class MainWindow(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
master.title("Paintmgr") # References the Toplevel for the MainWindow
self.master = master
self.grid()
self.create_widgets()
def create_widgets(self):
thiscol = 0
tk.Label(self, text='Corner x').grid(row=0,column=thiscol)
tk.Label(self, text='Corner y').grid(row=1,column=thiscol)
tk.Label(self, text='Corner z').grid(row=2,column=thiscol)
thiscol += 1
self.xcoord = tk.Entry(self)
self.xcoord.grid(row=0, column=thiscol)
self.ycoord = tk.Entry(self)
self.ycoord.grid(row=1, column=thiscol)
self.zcoord = tk.Entry(self)
self.zcoord.grid(row=2, column=thiscol)
thiscol += 1
tk.Button(self, text='Work on', command=self.WorkOnButtonAction).grid(row=0, column=thiscol)
tk.Button(self, text='Quit', command=self.QuitButtonAction).grid( row=1, column=thiscol)
for coliter in range(0,thiscol):
self.columnconfigure(coliter, weight=1, pad=20)
self.master.minsize(500,200)
def QuitButtonAction(self):
self.master.destroy()
def WorkOnButtonAction(self):
# Validate the original window's data before making a new window.
# If the user gave invalid data, give a popup and stop.
if not ( (self.xcoord.get().isdigit) and
(self.ycoord.get().isdigit) and
(self.zcoord.get().isdigit)):
messagebox.showerror('Bad input', 'Input failed validation')
return
WorkOnWindow = tk.Toplevel()
WorkOnWindow.title("Paimtmgr - Work")
WorkOnWindow.grid()
thiscol = 0
tk.Label(WorkOnWindow, text=f'X:').grid(row=0, column=thiscol)
tk.Label(WorkOnWindow, text=f'Y:').grid(row=1, column=thiscol)
tk.Label(WorkOnWindow, text=f'Z:').grid(row=2, column=thiscol)
tk.Label(WorkOnWindow, text=f'Status:').grid(row=3, column=thiscol)
thiscol += 1
tk.Button(WorkOnWindow, text='Fetch', command=self.FetchButtonAction).grid(row=0, column=thiscol)
tk.Button(WorkOnWindow, text='Edit', command=self.EditButtonAction ).grid(row=1, column=thiscol)
tk.Button(WorkOnWindow, text='Push', command=self.PushButtonAction ).grid(row=2, column=thiscol)
thiscol += 1
tk.Label(WorkOnWindow, text='Close this window when done with it.\nPlease do not edit settings in the main window while using this one.\nPlease do not open multiples of this window.').grid(row=4, column=0, columnspan=5)
for coliter in range(0,thiscol):
WorkOnWindow.columnconfigure(coliter, weight=1, pad=20)
WorkOnWindow.minsize(500,200)
def FetchButtonAction(self):
pass
def EditButtonAction(self):
pass
def PushButtonAction(self):
pass
root = tk.Tk()
app = MainWindow(master=root)
app.mainloop()
Comments