Skip to content

Instantly share code, notes, and snippets.

@markcam1
Created May 13, 2019 21:07
Show Gist options
  • Save markcam1/916338bfe94f2c3acd1e766dbc3cd968 to your computer and use it in GitHub Desktop.
Save markcam1/916338bfe94f2c3acd1e766dbc3cd968 to your computer and use it in GitHub Desktop.
tkinter gui example with buttons and display screen
import tkinter
from tkinter import ttk
from tkinter import messagebox
from tkinter import Text
import logging
# internal
from app_main import *
from data_storage.db_io import VersionDatabase
from customer.current_customer import CustomerManager
#logging
logging.basicConfig(level=logging.DEBUG,
format=' %(asctime)s - %(levelname)s - %(message)s')
logging.debug('\n\nStart Main GUI')
class RdopsTool(ttk.Frame):
def __init__(self, parent, *args, **kwargs):
ttk.Frame.__init__(self, parent, *args, **kwargs)
self.root = parent
self.init_gui()
def hello_world(self):
print('hello main gui')
def on_quit(self):
"""Exits program."""
quit()
def no_customer(self):
self.screen.configure(state='normal')
self.screen.insert('1.0', 'cannot load; run new customer' + '\n')
self.screen.configure(state ='disabled')
self.load_cust.configure(state = 'disabled')
def get_customer(self):
cm = CustomerManager()
try:
cust_names = cm.export_names()
except AssertionError as error:
self.no_customer()
logging.exception(error)
except UnboundLocalError as e:
self.no_customer
logging.exception(e)
else:
self.low_name_label['text'] = cust_names[0]
self.low_vers_label['text'] = cust_names[1]
self.high_name_label['text'] = cust_names[2]
self.high_vers_label['text'] = cust_names[3]
self.screen.configure(state='normal')
self.screen.insert('1.0', 'loaded active customer' + '\n')
self.screen.configure(state ='disabled')
def delete_customer(self):
cm = CustomerManager()
cm.clear_data()
def get_new_jenkins(self):
print('get new customer')
am = AppMain()
new_jenkins_result = am.jenkins_load()
am.unzip_new_jenkins()
print(f'new jenkins result: {new_jenkins_result} ')
if (new_jenkins_result):
self.screen.configure(state='normal')
self.screen.insert('1.0', 'new customer dowloaded' + '\n')
self.screen.configure(state ='disabled')
self.get_customer()
if (str(self.load_cust['state']) == 'disabled' ):
self.load_cust.configure(state = 'normal')
def filter_jiras(self):
pp = ParentProcessor()
pp.get_local_parent()
pp.request_parent_data()
stp = SubtaskProcessor()
stp.get_subtask_fields()
stp.run_parse_subtasks()
def view_versions(self):
print('write db button pushed')
# vd = VersionDatabase()
# displayVersions = vd.write_db()
# #messagebox.showinfo("Version Map: ", displayVersions)
# # self.screen.configure(state='normal')
# # self.screen.insert(END, str(displayVersions) + '\n')
# # # record every value inserted in screen
# # self.screen.configure(state ='disabled')
# self.answer_label['text'] = 'read db'
# self.popup_message(displayVersions)
def popup_message(self, msg):
popup = tkinter.Tk()
popup.wm_title("!")
label = ttk.Label(popup, text=msg)
label.pack(side="top", fill="x", pady=10)
B1 = ttk.Button(popup, text="Okay", command = popup.destroy)
B1.pack()
popup.mainloop()
def init_gui(self):
self.root.title('RDOPS TOOL')
self.grid(column=0, row=0, sticky='nsew')
self.menubar = tkinter.Menu(self.root)
self.menu_file = tkinter.Menu(self.menubar)
self.menu_file.add_command(label='Exit', command=self.on_quit)
self.menu_edit = tkinter.Menu(self.menubar)
self.root.config(menu=self.menubar)
self.menubar.add_cascade(menu=self.menu_file, label='File')
self.menubar.add_cascade(menu=self.menu_edit, label='Edit')
ttk.Separator(self, orient='horizontal').grid(column=0, row=1, columnspan=4, sticky='ew')
#######
self.load_cust = ttk.Button(self, text='Load Customer', command=self.get_customer)
self.load_cust.grid(column=0, row=2, columnspan=4, sticky='nsew')
# NEW CUSTOMER BUTTON ROW = 3
self.new_cust = ttk.Button(self, text='New Customer', command=self.get_new_jenkins)
self.new_cust.grid(column=0, row=3, columnspan=4, sticky='nsew')
# NEW DELETE BUTTON ROW = 4
self.new_cust = ttk.Button(self, text='Delete Customer', command=self.delete_customer)
self.new_cust.grid(column=0, row=4, columnspan=4, sticky='nsew')
# TEXT BOX LOWER | ROW 5
self.low_name_frame = ttk.LabelFrame(self, text='customer', height=100)
self.low_name_frame.grid(column=0, row=5, columnspan=4, sticky='nsew')
self.low_name_label = ttk.Label(self.low_name_frame, text='')
self.low_name_label.grid(column=0, row=0)
self.low_vers_frame = ttk.LabelFrame(self, text='current version', height=100)
self.low_vers_frame.grid(column=4, row=5, columnspan=4, sticky='nsew')
self.low_vers_label = ttk.Label(self.low_vers_frame, text='')
self.low_vers_label.grid(column=0, row=0)
# text box high | ROW 6
self.high_name_frame = ttk.LabelFrame(self, text='upgrade target', height=100)
self.high_name_frame.grid(column=0, row=6, columnspan=4, sticky='nsew')
self.high_name_label = ttk.Label(self.high_name_frame, text='')
self.high_name_label.grid(column=0, row=0)
self.high_vers_frame = ttk.LabelFrame(self, text='upgrade version', height=100)
self.high_vers_frame.grid(column=4, row=6, columnspan=4, sticky='nsew')
self.high_vers_label = ttk.Label(self.high_vers_frame, text='')
self.high_vers_label.grid(column=0, row=0)
# ROW 7
ttk.Separator(self, orient='horizontal').grid(column=0, row=7, columnspan=4, sticky='ew')
#ROW 8
self.run_diff_1 = ttk.Button(self, text='Run Diff v1', command=self.filter_jiras)
self.run_diff_1.grid(column=0, row=8, columnspan=4, sticky='nsew')
# self.num1_entry = ttk.Entry(self, width=5)
# self.num1_entry.grid(column=1, row=2)
# self.num2_entry = ttk.Entry(self, width=5)
# self.num2_entry.grid(column=3, row=2)
# self.db_button = ttk.Button(self, text='View Version Table', command=self.view_versions)
# self.db_button.grid(column=0, row=5, columnspan=4)
# self.answer_frame = ttk.LabelFrame(self, text='answer', height=100)
# self.answer_frame.grid(column=0, row=6, columnspan=5, sticky='nsew')
# self.answer_label = ttk.Label(self.answer_frame, text='')
# self.answer_label.grid(column=0, row=0)
self.screen = Text(root, state='disabled', width=35, height=3,background="#33F3FF", foreground="blue")
#self.screen = Text(root, state='disabled',background="#33F3FF", foreground="blue")
#self.screen.grid(column=0, row=1, columnspan=4, sticky='nsew')
self.screen.grid()
ttk.Label(self, text='Customer').grid(column=0, row=0, columnspan=4)
# ttk.Label(self, text='number one').grid(column=0, row=2, sticky='w')
# ttk.Label(self, text='number two').grid(column=2, row=2, sticky='w')
for child in self.winfo_children():
child.grid_configure(padx=5, pady=5)
if __name__=='__main__':
root = tkinter.Tk()
root.geometry("300x375")
RdopsTool(root)
root.mainloop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment