-
Notifications
You must be signed in to change notification settings - Fork 1
/
apt.py
131 lines (90 loc) · 4.31 KB
/
apt.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
'''This file initializes the GUI of the tracker and all necessary components for file IO'''
import numpy as np
#import matplotlib as mpl
import os
from time import sleep
from tkinter import *
import webbrowser as web
#import matplotlib.backends.tkagg as tkagg
#from matplotlib.backends.backend_agg import FigureCanvasAgg
from apt_graph import APT_Graph
import apt_connector
class Application(Frame):
def __init__(self, master = None):
super().__init__(master, bg = "white")
self.master = master
#Configure window
self.master.geometry("1600x900")
self.master.title("Amazon Price Tracker")
self.master.configure(background = "white")
self.pack()
#Create widgets
self.init_widgets()
def init_widgets(self):
#Define Canvas
self.canvas = Canvas(self, width = 1600, height = 900)
self.canvas.configure(background = "white")
self.canvas.pack()
#Place logo on Canvas
path = os.getcwd() + "\\apt_icon.png"
logo = PhotoImage(file = path)
self.canvas.create_image(500, 0, image = logo, anchor = "nw")
self.canvas.image = logo #Avoid python garbage collection from scooping up my img
#Place graph on canvas
self.graph = APT_Graph(50, 225, 1500, 350, 130, master = self.canvas) # , init_data = apt_connector.get_data("sony_headphones_b07g4mnfs1")
#graph.add_data(apt_connector.get_data("sony_headphones_b07g4mnfs1"))
self.canvas.graph = self.graph #Again :P
#TODO: Add widget for entry, submit, and select
self.url_label = Label(text = "URL: ", font = ("Courier New", 32), bg = "white", anchor = "nw", justify = "left", master = self.canvas)
self.url_label.place(x = 50, y = 650)
self.url_text_label = Label(text = current_url, font = ("Courier New", 32), fg = "blue", bg = "white", anchor = "nw", justify = "left", master = self.canvas)
self.url_text_label.place(x = 175, y = 650)
self.url_text_label.bind("<Button-1>", self.open_web)
self.item_label = Label(text = "Item: ", font = ("Courier New", 32), bg = "white", anchor = "nw", justify = "left", master = self.canvas)
self.item_label.place(x = 50, y = 150)
#TODO: Add functionality to extract product ASIN from Amazon webpage
#TODO: Add functionality for graph to update upon new selection
def update_graph(self, table_name):
self.graph.update_data(apt_connector.get_data(table_name))
self.graph.draw_graph()
def open_web(self, *args):
web.open(current_url, new = 2, autoraise = True)
#Init DB connector
apt_connector = apt_connector.APT_Connector("amazon_price_tracker")
current_table = apt_connector.list_tables()[0]
current_url = "https://amazon.com/dp/" + current_table.split("_")[-1]
#Init Window and App
root = Tk()
app = Application(master = root)
#Run the application
#app.mainloop()
#app.update_graph("sony_headphones_b07g4mnfs1")
while True:
app.after(10, app.update_graph(current_table))
app.update_idletasks()
app.update()
#self.canvas.create_line(0, 0, 800, 600)
#main_label = Label(self.canvas, text = "Amazon Price Tracker", font = ("Courier New", 32), bg = "black", fg = "red")
#main_label.pack({"side": "top"})
#MPL in Tkinter
'''
def embed_graph(canvas, graph, location = (0, 0)):
#Init graph canvas
graph_canvas = FigureCanvasAgg(graph)
graph_canvas.draw()
graph_x, graph_y, graph_width, graph_height = graph.bbox.bounds
#Convert width and height to usable integers
graph_width, graph_height = int(graph_width), int(graph_height)
#Create an image background for the mpl graph
graph_image = PhotoImage(master = canvas, width = graph_width, height = graph_height)
canvas.create_image(location[0] + graph_width / 2, location[0] + graph_height / 2, image = graph_image)
#Assign a renderer to the graph canvas
tkagg.blit(graph_image, graph_canvas.get_renderer()._renderer, colormode = 2)
return graph_image #Avoid garbage collection because python sucks ;)
def draw_graph(self, graph, location = (0, 0)):
graph_image = self.embed_graph(self.canvas, graph, location = location)
graph = mpl.figure.Figure(figsize = (2, 1))
axes = graph.add_axes([0, 0, 1, 1])
axes.plot(np.linspace(0, 100), 50)
app.draw_graph(graph, location = (0, 0))
'''