Untitled
unknown
plain_text
4 years ago
6.7 kB
10
Indexable
import tkinter as tk
from tkinter import ttk
class Model:
def __init__(self, **kwargs):
for key in kwargs:
setattr(self, key, kwargs[key])
class Root(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
# setting window title and icon
self.title("TCR Tool V2.1")
self.iconbitmap('D:/Users/Gabriel/Documents/PycharmProjects/pythonProject/Tkinter/Not TCR/Icon/icon.ico')
self.geometry('600x300')
self.resizable(width=False, height=False)
# setting GUI theme
style = ttk.Style(self)
style.configure("Button", background="red")
style.map('Button', background=[('active', 'red')])
# Import the tcl file
self.tk.call('source', 'azure/azure.tcl')
style.theme_use('azure')
# create Model object for storing user credentials
self.credentials = Model()
# create Model object for storing fixed version in nested dictionary
self.fv_dict = Model()
# creating a container
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.container = container
self.show_frame(LoginPage)
# to display the current frame passed as
# parameter
def show_frame(self, cont):
frame = cont(self.container, self)
frame.grid(row=0, column=0, sticky="nsew")
frame.tkraise()
# first window frame startpage
class LoginPage(tk.Frame):
# Parent is tk.Frame, controller is root
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
self.credentials = controller.credentials
self.fv_dict = controller.fv_dict
# configure rows
self.grid_rowconfigure(0, weight=1)
self.grid_rowconfigure(1, weight=1)
self.grid_rowconfigure(2, weight=1)
self.grid_rowconfigure(3, weight=1)
self.grid_rowconfigure(4, weight=2)
# configure column
self.columnconfigure(0, weight=1)
self.columnconfigure(1, weight=1)
self.columnconfigure(2, weight=1)
self.columnconfigure(3, weight=1)
# layout for JIRA login
label_jira_id = ttk.Label(self, text="JIRA Username")
label_jira_id.grid(row=1, column=0)
label_jira_pw = ttk.Label(self, text="JIRA Password")
label_jira_pw.grid(row=2, column=0)
self.entry_jira_id = ttk.Entry(self)
self.entry_jira_id.grid(row=1, column=1)
self.entry_jira_pw = ttk.Entry(self, show="*")
self.entry_jira_pw.grid(row=2, column=1)
button_jira_login = ttk.Button(self, text="Login",
command=self.jira_login_clicked)
button_jira_login.grid(row=3, column=1)
# Layout for Postgres login
label_post_id = ttk.Label(self, text="Postgres Username")
label_post_id.grid(row=1, column=2)
label_post_pw = ttk.Label(self, text="Postgres Password")
label_post_pw.grid(row=2, column=2)
self.entry_post_id = ttk.Entry(self)
self.entry_post_id.grid(row=1, column=3)
self.entry_post_pw = ttk.Entry(self, show="*")
self.entry_post_pw.grid(row=2, column=3)
button_post_login = ttk.Button(self, text="Login",
command=self.post_login_clicked)
button_post_login.grid(row=3, column=3)
def jira_login_clicked(self):
self.credentials.jira_id = self.entry_jira_id.get()
self.credentials.jira_pw = self.entry_jira_pw.get()
# Login to JIRA and check credentials
def post_login_clicked(self):
self.credentials.post_id = self.entry_post_id.get()
self.credentials.post_pw = self.entry_post_pw.get()
# Query Post and generate nested_dict
self.fv_dict.content = self.generate_fv_dict()
# Show next window
self.controller.show_frame(Page1)
def generate_fv_dict(self):
# INSERT QUERY CONVERSION FUNCTION HERE, RIGHT NOW HARD CODED
return {
'FWVI': {'Firmware Version': ['9.1.2.0', '9.1.3.0'],
'Phoenix Version': ['5.1.2.0', '5.1.3.0']},
'FWV': {'Fixed Version': ['8.1.2.0', '8.1.3.0'],
'Eclipse Version': ['4.1.2.0', '4.1.3.0']}
}
# second window frame page1
class Page1(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
# passing on values from controller
self.credentials = controller.credentials
self.fv_dict = controller.fv_dict
# defining variable type for combination box
self.selected_project = tk.StringVar()
self.selected_fv = tk.StringVar()
self.selected_fv_number = tk.StringVar()
# creating interlinked combination box
# creating project combination box
self.cb_project = ttk.Combobox(self, values=list(self.fv_dict.content.keys()), width=15,
textvariable=self.selected_project, state='readonly')
self.cb_project.grid(row=1, column=1)
self.selected_project.trace('w', self.update_fv) # track the change event
# creating fixed version combination box
self.cb_fv = ttk.Combobox(self, values=None, width=15, textvariable=self.selected_fv, state='readonly')
self.cb_fv.grid(row=1, column=2)
self.selected_fv.trace('w', self.update_fv_number) # track the change event
# creating fixed version number combination box
self.cb_fv_number = ttk.Combobox(self, values=None, width=15, textvariable=self.selected_fv_number,
state='readonly')
self.cb_fv_number.grid(row=1, column=3)
def update_fv(self, *args):
self.cb_fv.set('') # remove the previous selected option
self.cb_fv_number.set('')
self.cb_fv['values'] = list(self.fv_dict.content[self.selected_project.get()])
def update_fv_number(self, *args):
if self.selected_fv.get() != '':
self.cb_fv_number.set('') # remove the previous selected option
self.cb_fv_number['values'] = list(self.fv_dict.content[self.selected_project.get()]
[self.selected_fv.get()])
# Driver Code
if __name__ == "__main__":
app = Root()
app.mainloop()
Editor is loading...