def __init__(self, master, controller): style = ttk.Style() #Initiates navigational frame (bottom) tk.Frame.__init__(self, master, bg='#2e3131') #Creates actual stock page frame (create first to be ontop) stockFrame = tk.Frame(self, width=500, height=600, bg='grey') stockFrame.pack() #Creates stock page title and nav buttons on navigational frame navLabel = tk.Label(self, text="Stocks", font=LARGE_FONT, bg='#2e3131', fg='#e5dddb') navLabel.pack(pady=10, padx=10) button1 = ttk.Button(self, text="Back to Home", command=lambda: controller.show_frame(HomePage)) button1.pack() button2 = ttk.Button(self, text="Accounts", command=lambda: controller.show_frame(Accounts)) button2.pack() button3 = ttk.Button(self, text="Settings", command=lambda: controller.show_frame(Settings)) button3.pack() #Verfification for existing toolbar and invalid text indicator #to delete on reexecution if exists. self.tool = False self.open = False self.i = False #FRAME Setup labelTitle = tk.Label(stockFrame, text="Stocks", font=("malgun gothic semilight", 20), bg='grey', fg='black') labelTitle.place(relx=0.5, rely=0.03, anchor='n') #Entry widget to enter ticker of stock to be plotted tickerEntry = ttk.Entry(stockFrame) tickerEntry.place(relx=0.18, rely=0.918, anchor='n') #Upon button press, access stock info and plot it (below function) tickerButton = ttk.Button(stockFrame, text="Confirm", command=lambda: pressPlot(tickerEntry.get())) tickerButton.place(relx=0.38, rely=0.918, anchor='n') #Creates radiobuttons to choose length of stock history style.configure("TRadiobutton", background='grey', selectcolor='green', font=("malgun gothic semilight", 10)) style.map("TRadiobutton", foreground=[('pressed', 'green')]) #5 days Radio_1 = ttk.Radiobutton(stockFrame, text='5dy', value=1, command=lambda: setDate(5)) Radio_1.place(relx=0.05, rely=0.76, anchor='nw') #1 month Radio_2 = ttk.Radiobutton(stockFrame, text='1mo', value=2, command=lambda: setDate(30)) Radio_2.place(relx=0.15, rely=0.76, anchor='nw') #6 months Radio_3 = ttk.Radiobutton(stockFrame, text='6mo', value=3, command=lambda: setDate(180)) Radio_3.place(relx=0.25, rely=0.76, anchor='nw') #1 year Radio_4 = ttk.Radiobutton(stockFrame, text='1yr', value=4, command=lambda: setDate(365)) Radio_4.place(relx=0.35, rely=0.76, anchor='nw') #5 years Radio_5 = ttk.Radiobutton(stockFrame, text='5yr', value=5, command=lambda: setDate(1826)) Radio_5.place(relx=0.45, rely=0.76, anchor='nw') #Upon call from a radio button, sets various variables to match current date #and previous date according to inputed time delta def setDate(x): #These globals make the variables available to the entrie script #usable by any definition that follows global year2 global month2 global date2 global year1 global month1 global date1 #-Current Date- #uses datetime to create string of current date (x2) now = dt.datetime.now() current = str(now) #Sorts through string to store year, month and date which is needed #to plot the day and acquire stock data (for pandas and numpy) year2 = int(current[0:4]) month2 = int(current[5:7]) date2 = int(current[8:10]) currentList = [year2, month2, date2] #Uses timedelta to find the prior date (x1) before = dt.datetime.now() - timedelta(days=x) #-Prior Date- #Creates prior date string which is also sorted to find #year, month and date for same reasons prior = str(before) year1 = int(prior[0:4]) month1 = int(prior[5:7]) date1 = int(prior[8:10]) priorList = [year1, month1, date1] #Prints both dates in shell (mainly for debug) print(year2, month2, date2) print(year1, month1, date1) #Opens new sub window that allows user to invest money (from balance) #into defined stock at the live price #Money made is "simulated" as if the user invested at the open price since there is no #simple manner to acquire and update current stock information to find the actual gain def Invest(): self.open = True global tickerList, priceList global stocksFg, lineC, arrow #Acquire Ticker Info x = tickerEntry.get() livP = si.get_live_price(x) #not very live table = si.get_quote_table(x) opnP = table['Open'] pclP = table['Previous Close'] netPrise = opnP - pclP prcntrise = (netPrise / pclP) #Create new investing window self.r = tk.Tk() self.r.title("Invest") #Creates actual stock page frame (create first to be ontop) investFrame = tk.Frame(self.r, width=400, height=400, bg='grey') investFrame.pack() #Creates top label to show current balance Binst = tk.Label(investFrame, text='Balance', bg='grey', fg='darkgreen', font=("malgun gothic semilight", 8)) Binst.pack() BLabel = tk.Label(investFrame, text='$' + str(balance), bg='grey', fg='black', font=("malgun gothic semilight", 20, "bold")) BLabel.pack() #Creates middle label to show current price of shares to be bought #according to slider position Pinst = tk.Label(investFrame, text='Shares Price', bg='grey', fg='darkgreen', font=("malgun gothic semilight", 8)) Pinst.pack() PLabel = tk.Label(investFrame, text='$' + '0', bg='grey', fg='black', font=("malgun gothic semilight", 20, "bold")) PLabel.pack() #Creates scale bar and displays its value to represent #amount of shares to buy scalevar = tk.IntVar() scalevar.set(0) #Creates shares label to display number of shares to be bought #according to slider sharesinst = tk.Label(investFrame, text='Number of Shares', bg='grey', fg='darkgreen', font=("malgun gothic semilight", 8)) sharesinst.pack() shares = tk.Label(investFrame, textvariable=scalevar, bg='grey', fg='black', font=("malgun gothic semilight", 20, "bold")) shares.pack() #Updates PLabel def showP(x): PLabel['text'] = '$' + str(round(x, 2)) #Creates slider to select and show number shares to buy and shows their price PLabelPrice = scalevar.get() slidStock = tk.Scale( investFrame, from_=0, to_=100, length=394, variable=scalevar, orient="horizontal", bg='grey', command=lambda PLabelPrice: showP(int(PLabelPrice) * livP)) slidStock.pack() #Function that will show currently owned stocks, their price bought at #and how much money made def show(): #Creates second frame to put stock info on self.investFrame2 = tk.Frame(self.r, width=400, height=50, bg='grey') self.investFrame2.pack() #Creates 2 lists to hold required frames and buttons for #each stock info frame (each ticker will have one - according to ticker and price lists) frameList = [] buttonList = [] #Creates the required number of variable names for frames and buttons for i in range(len(tickerList)): frameList.append('stockFrame' + str(i)) buttonList.append('stockB' + str(i)) #Creates and displays the stock info for i in frameList: #Creates an actual frame under the name of each item in frameList frame = i frame = tk.Frame(self.investFrame2, relief='groove', bd=3, width=400, height=50, bg='#121f1f') frame.pack() #Creates the stock label showing the ticker, price the shares were bought at sL = tk.Label(frame, text=tickerList[frameList.index(i)].upper() + " " + str(priceList[frameList.index(i)]), bg='#121f1f', fg='white', font=("malgun gothic semilight", 8)) sL.place(relx=0.2, rely=0.5, anchor='center') #Creates the net stock profit label to place (different label since needs colour) sP = tk.Label( frame, text='$' + str(round(priceList[frameList.index(i)] * prcntrise, 2)) + arrow, bg='#121f1f', fg=stockFg, font=("malgun gothic semilight", 8)) sP.place(relx=0.6, rely=0.5, anchor='center') #Creates unique sell button (with unique sell() call parameter pertaining to stock it is #associated with) for each button in button list button = buttonList[frameList.index(i)] #must use i=i to save the frame (and its index position) at the time the #button was created (so we'll have buttons 0 to n and not just all n) button = ttk.Button( frame, text="Sell", command=lambda i=i: sell(frameList.index( i))) #i=i to store i at the time button.place(relx=0.8, rely=0.5, anchor='center') #New function that will sell the shares of the ticker it is #associated with upon sell button press def sell(x): print(x) global balance #Creates a sum variable according to the price the shares were bought #at in addition to net profit summ = priceList[x] + priceList[x] * prcntrise #Adds the sum to the balance value balance += summ #updates the balance label BLabel['text'] = '$' + str(round(balance, 2)) #removes removed stock ticker and price from appropriate lists tickerList.remove(tickerList[x]) priceList.remove(priceList[x]) #destroys stock info frame and calls show again to update and register changes #(more efficient than updating the whole r window) self.investFrame2.destroy() show() #Calls show from r window startup to display currently owned shares #from load data (if any). show() #Trans function to show bought stock, amount made and update balance def Trans(y): global balance global stocksDict global tickerList, priceList print(priceList) #Buys stock if balance sufficient and if more than 0 shares bought if slidStock.get() * livP <= y and slidStock.get() > 0: #Creates transaction history label print("Successfully purchased", slidStock.get(), "Stocks from", x, "for $", round(slidStock.get() * livP, 2), "made", round(slidStock.get() * livP * prcntrise, 2)) #Updates balance value balance -= slidStock.get() * livP #Updates balance on label value BLabel['text'] = '$' + str(round(balance, 2)) #stores stock and share price in 2 seperate lists to #save and access data #if the ticker is already listed, won't add a new object in the list, #rather just add the value to the current pricelist value at the appropriate #position if x in tickerList: ticker = tickerList.index( x) #stores the position of ticker in tickerlist iPrice = priceList[ticker] #old price #updates to new price at appropriate position in pricelist fPrice = round(iPrice + slidStock.get() * livP, 2) priceList[ticker] = fPrice #else creates new objects in both ticker and price lists at the end else: tickerList.append(x) priceList.append(round(slidStock.get() * livP, 2)) #same as above to update the stock info self.investFrame2.destroy() show() else: print("Insufficient Funds!") print(tickerList, priceList) #Upon save button press, will save current balance value and ticker/price lists #for stock info def Save(): global uname, tickerList, priceList #Saves info under unique file pertaining to username and password as the name #(if already there will open it, else will create one) f = open(uname + pword + ".txt", "w+") f.write(str(round(balance, 2))) #stores balance value f.write('\n') #skips to new line #for each item in ticker list, store it and its value beside it (each ticker #and its price are in the same index position in their according lists) for i in range(len(tickerList)): f.write(tickerList[i] + " " + str(priceList[i])) f.write('\n') f.close #Button to confirm purchase of shares iB = ttk.Button(investFrame, text="Confirm", command=lambda: Trans(balance)) iB.pack(pady=10) #Button to save current portfolio info saveB = ttk.Button(investFrame, text="Save Portfolio", command=lambda: Save()) saveB.pack() #---------------- #Stock Graphing #--------------- def pressPlot(x): global stockFg, lineC, arrow try: #Getting stock open price, live price and %netrise livP = si.get_live_price(x) #not very live table = si.get_quote_table(x) opnP = table['Open'] pclP = table['Previous Close'] netPrise = opnP - pclP prcntrise = (netPrise / pclP) * 100 print("Open {0}, Previous Close {1}, Current {2}".format( opnP, pclP, round(livP, 2))) if netPrise >= 0: stockFg = 'green' lineC = 'g' arrow = '↑' else: stockFg = 'red' lineC = 'r' arrow = '↓' #destroys any existing toolbars or labels if they already existed #prior to a new plot if self.tool == True: self.toolbar.destroy() self.tickerPriceL.destroy() self.tickerRiseL.destroy() self.tickerprcntL.destroy self.tickerTitleL.destroy() #Plots ticker and ticker Price Live self.tickerPrice = round(livP, 2) self.tickerPriceL = tk.Label( stockFrame, text=str(self.tickerPrice) + ' USD', font=("malgun gothic semilight", 15, "bold"), bg='grey', fg='white') self.tickerPriceL.place(relx=0.41, rely=0.81, anchor='n') self.tickerRiseL = tk.Label(stockFrame, text=round(netPrise, 2), font=("malgun gothic semilight", 10, "bold"), bg='grey', fg=stockFg) self.tickerRiseL.place(relx=0.05, rely=0.875, anchor='nw') self.tickerprcntL = tk.Label( stockFrame, text='(' + str(round(prcntrise, 2)) + '%) ' + arrow, font=("malgun gothic semilight", 10, "bold"), bg='grey', fg=stockFg) self.tickerprcntL.place(relx=0.13, rely=0.875, anchor='nw') self.tickerTitleL = tk.Label(stockFrame, text=x.upper(), font=("malgun gothic semilight", 25, "bold"), bg='grey', fg='white') self.tickerTitleL.place(relx=0.05, rely=0.8, anchor='nw') #Plotting the graph of given stock (Ticker) pt.style.use("ggplot") start = dt.datetime(year1, month1, date1) #Start date, xi on plot end = dt.datetime(year2, month2, date2) #End date as today,xf on plot #Creates button which opens window for allowing investing investB = ttk.Button(stockFrame, text="Invest", command=Invest) investB.place(relx=0.68, rely=0.918, anchor='n') #Acquires data of given stock (ticker) from #Yahoo Finance API df = web.get_data_yahoo(str(x), start, end) #Plots given data, with identifier "Adj Close" on axes df["Adj Close"].plot() #Prints title for Stock graph print(x.upper(), "stock price from " + str(start) + " to " + str(end)) #Graph styling on size f = Figure(figsize=(5, 4), dpi=100) a = f.add_subplot(111) #Makes plot visible on select frame f.patch.set_facecolor('#121f1f') #sets AXES colour a.patch.set_facecolor('xkcd:grey') #sets actual PLOT colour a.set_title(str(x.upper()) + " stock price from " + str(start) + " \nto " + str(end), color="#%02x%02x%02x" % (255, 250, 250)) a.set_xlabel('Date') #sets x axis label to "date" a.set_ylabel('Price($)') #sets y axis label to "price" a.plot(df["Adj Close"], lineC) #Allocates canvas area to display graph (embeds mtplot graph #using FigureCanvasTkAgg function canvas = FigureCanvasTkAgg(f, stockFrame) canvas.draw() canvas.get_tk_widget().place(relx=0.5, rely=0.9, anchor='n') canvas._tkcanvas.place(relx=0.5, rely=0.1, anchor="n") #Creates toolbar to manipulate stock graph self.toolbar = NavigationToolbar2Tk(canvas, self) self.toolbar.configure(bg='#2e3131') self.toolbar.update() self.tool = True if self.open == True: self.r.destroy() if self.i == True: self.LabelI.destroy() #Exception handling in case that invalid ticker is entered except web._utils.RemoteDataError: print("Invalid ticker, try again - must be NYSE") self.LabelI = tk.Label( stockFrame, text="Invalid ticker, try again - must be NYSE", bg="green", fg="red") self.LabelI.place(relx=0.5, rely=0.9, anchor="n") self.i = True #True since invalid text has appeared except AttributeError: print("Invalid ticker, try again - must be NYSE") self.LabelI = tk.Label( stockFrame, text="Invalid ticker, try again - must be NYSE", bg="green", fg="red") self.LabelI.place(relx=0.5, rely=0.9, anchor="n") self.i = True except ValueError: print("Please input viewing domain")
def NavAccess(): global balance, tickerList, priceList #Creates a finenhance label on the nav bar navLabel = tk.Label(self, text="Finenhance", font=("malgun gothic semilight", 12), bg='#2e3131', fg='#e5dddb') navLabel.pack(pady=5, padx=10) #Another welcome message (in green) to the user welcomeLabel = tk.Label(self, text='Welcome back ' + self.nameEL.get() + '!', font=("malgun gothic semilight", 10), bg='#2e3131', fg='green') welcomeLabel.pack(padx=10, pady=10) #More styling style.configure("TButton", foreground="green", font=("malgun gothic semilight", 9)) style.map("TButton", foreground=[('pressed', 'black'), ('active', 'green')], background=[('pressed', '!disabled', 'black'), ('active', 'green')]) #Creates 2 buttons (Stocks and Accounts to navigate to those #respective pages button = ttk.Button( self, text="Accounts", command=lambda: controller.show_frame(Accounts)) button.pack() button2 = ttk.Button(self, text="Stocks", command=lambda: controller.show_frame(Stocks)) button2.pack() button3 = ttk.Button( self, text="Settings", command=lambda: controller.show_frame(Settings)) button3.pack(pady=10) #Will try to load data from file if user has previously #saved info try: #Searches for unqiue file pertaining #to user's name and pass f = open(uname + pword + ".txt", "r") information = f.readlines() #creates list of file info print(information) balance = float(information[0]) #balance is the first line #sorts through the list and formats it to show stock owned and price bought at for i in range(len(information) - 1): tickerList.append(information[i + 1].partition(" ")[0]) priceList.append( float(information[i + 1].partition(" ")[-1].strip('\n'))) #Notifies user they have logged before and that their info was found #prints the user's saved data print("Loaded Profile!") print("Balance: ", balance) print("Shares Owned Currently: ") print() for i in range(len(tickerList)): print(tickerList[i] + " " + str(priceList[i])) print() #If file is not found, user has not logged in before and so #notifies user except FileNotFoundError: print("No data found for user")
root.title("Wellness Tracker") # Style the screen style = ttk.Style() style.theme_use('clam') root.option_add('*TCombobox*Listbox*Background', '#CDCDCD') root.option_add('*TCombobox*Listbox*Foreground', '#2E2E2E') root.option_add('*TCombobox*Listbox*selectBackground', '#2E2E2E') root.option_add('*TCombobox*Listbox*selectForeground', '#CDCDCD') style.configure('TCombobox', fieldbackground='#3769B9', background='#CDCDCD', bordercolor='#3769B9', selectforeground='white', selectbackground='#3769B9') style.map('TCombobox', focuscolor=[('focus', 'red')]) style.configure('TNotebook', tabposition='wn', background='#EAEAEA', tabmargins=0, borderwidth=0, relief='flat', bordercolor="#EAEAEA") # configure tab with white background initially style.configure('TNotebook.Tab', background='#EAEAEA', width=10, borderwidth=0, relief='flat', bordercolor="#EAEAEA",
def try_login(): # this my login function if name_entry.get() == "" or password_entry.get() == "": lbl_text.config(text="Please complete the required field!", fg="red") else: db = bk.getConnection() cursor = db.cursor() cursor.execute( "SELECT * FROM `login` WHERE `username` = %s AND `password` = %s", (name_entry.get(), password_entry.get())) if cursor.fetchone() is None: lbl_text.config(text="Password and eamil doesn't match ", fg="red") else: messagebox.showinfo("LOGIN SUCCESSFULLY", "WELCOME") log.destroy() MAIN_WINDOW = Tk() #after successful this main ui should appear MAIN_WINDOW.title("Admin") MAIN_WINDOW.config(background="#f5f3b0") MAIN_WINDOW.iconbitmap('logo.jpg') width = 900 height = 650 screen_width = MAIN_WINDOW.winfo_screenwidth() screen_height = MAIN_WINDOW.winfo_screenheight() x = (screen_width / 2) - (width / 2) y = (screen_height / 2) - (height / 2) MAIN_WINDOW.geometry("%dx%d+%d+%d" % (width, height, x, y)) # scroll bar here frame = Frame(MAIN_WINDOW) frame.pack(expand=True, fill=BOTH) #.grid(row=0,column=0) hbar = Scrollbar(frame, orient=HORIZONTAL) hbar.pack(side=BOTTOM, fill=X) vbar = Scrollbar(frame, orient=VERTICAL) vbar.pack(side=RIGHT, fill=Y) def donothing(): exit() def show_payment(): sp.show() def register(): registration.Registration(MAIN_WINDOW) def showMessage(): ms.AddMessage(MAIN_WINDOW) def logout(): resposnse = messagebox.askquestion("Log Out", "Are you sure ?", icon='warning') if resposnse == 'yes': MAIN_WINDOW.destroy() import index #Admin menu menubar = Menu(MAIN_WINDOW) MAIN_WINDOW.config(menu=menubar) add = Menu(menubar, tearoff=0) add.add_command(label="Register", command=register) add.add_command(label="Message...", command=showMessage) menubar.add_cascade(label="Add", menu=add) menubar.add_command(label="Log out", command=logout) menubar.add_command(label="See payment", command=show_payment) menubar.add_cascade(label="Add user", command=lambda: min.AddAdmin(MAIN_WINDOW)) #Body panel global selected selected = [] def on_select(self): sel_val = tree.item(self.tree.selection()) messagebox.INFO('Information', 'click click !') title = Label(frame, text="LICENSE TRACKER", font=("Algerian", 30), bg='#f5e5bf', fg="#f763e1") title.pack(expand=True, fill=BOTH) #form to display notice style = ttk.Style() # style.theme_use('clam') style.configure("Treeview", background="white", foregound="black", rowheight=25, stretch=False) style.map('Treeview', background=[('selected', 'blue')]) lb_header = [ 'Branch', 'Document Type', 'Document No.', 'offence', 'Fine', 'Date', 'Count' ] #create trreeview table = ttk.Treeview(frame, columns=lb_header, show="headings", wrap=None) for col in lb_header: table.heading(col, text=col.title()) result = bk.fetch() for row in result: table.insert('', index='end', values=row) table.place(x=0, y=250) table.bind('<<TreeviewSelect>>', on_select) hbar.config(command=table.xview) vbar.config(command=table.yview) table.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) table.pack(side=LEFT, expand=True, fill=BOTH) graph = tk.Frame(MAIN_WINDOW, bg='red').pack() #Bar chart f = Figure(figsize=(5, 8), dpi=100) barchart = tk.Frame(graph) barchart.pack(side=LEFT) ax = f.add_subplot(111) result = bk.bar() label = [] count = [] data = 0 for i in result: label.append(i[0]) count.append(i[1]) data += 1 ind = np.arange(data) # the x locations for the groups width = .5 rects1 = ax.bar(ind, count, width) ax.set_ylabel('No of crime') ax.set_title('No of crime in a branch ') #x label x = np.arange(len(label)) ax.set_xticks(x) ax.set_xticklabels(label) #ax.legend() canvas = FigureCanvasTkAgg(f, barchart) canvas.get_tk_widget().pack(expand=True, side=RIGHT) #label(barchart,text='test').pack(side=BOTTOM) #line Graph info_frame = tk.Frame(master=graph, bg='green').pack(expand=True, side=RIGHT) #Button(master=graph, text="Show Graph", command=show_animation,font=("Arial",20)).pack(expand = True) Label(master=graph, text='Total Fine: Rs.' + str(bk.fund()), font=("Arial", 20)).pack() #Button(master=graph, text="Show animation", command=show_animation).pack(expand = True) MAIN_WINDOW.mainloop()
self.img2 = Image.open("C:/Users/DOF/Desktop/exit.png") eimg2 = ImageTk.PhotoImage(self.img2) quitButton = Button(toolbar, image=eimg2, relief=FLAT, command=_quit) quitButton.image = eimg2 quitButton.pack(side=LEFT, padx=2, pady=2) toolbar.pack(side=TOP, fill=X) # display the menu root.config(menu=menubar) root.protocol("WM_DELETE_WINDOW", _quit) root = Tk() root.title("DOF Movie Data Editor") root.iconphoto(root, PhotoImage(file="C:/Users/DOF/Desktop/ts.png")) width, height = root.winfo_screenwidth() - 10, root.winfo_screenheight() - 90 root.geometry('%dx%d+0+0' % (width, height)) style = ttk.Style() style.map("TButton", foreground=[('pressed', 'red'), ('active', 'blue')], background=[('pressed', '!disabled', 'black'), ('active', 'white')]) app = App(root) root.mainloop()