def HeaderInfo():
     window = tk.Toplevel(root)
     window.title("Header Information")
     window.resizable(True, True)
     header_info = Table(window, dataframe=df)
     header_info.autoResizeColumns()
     header_info.show()
class DataFrame(tk.Frame):
    label = "View Data"

    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        self.columnconfigure(index=0, weight=1)
        self.rowconfigure(index=1, weight=1)

        self.create_widgets()

    def show(self):
        self.tkraise()

    def create_widgets(self):
        # Create buttons to manage the DB.
        self.toolbar = tk.Frame(self)
        self.toolbar.grid(row=0, column=0, padx=12, pady=3, sticky="NSEW")
        for col in range(12):
            self.toolbar.columnconfigure(index=col, weight=1)

        self.save_button = tk.Button(
            self.toolbar, text="Save Data To DB", command=self.save_to_db)
        self.export_button = tk.Button(
            self.toolbar, text="Export Data to File", command=self.export_data)
        self.import_button = tk.Button(
            self.toolbar, text="Import Data from CSV", command=self.import_csv)
        self.refresh_button = tk.Button(
            self.toolbar, text="Refresh Data from DB", command=self.refresh_table_data)

        self.save_button.grid(row=0, column=12)
        self.export_button.grid(row=0, column=11)
        self.import_button.grid(row=0, column=10)
        self.refresh_button.grid(row=0, column=9)

        self.table_container = tk.Frame(self)
        self.table_container.grid(row=1, column=0, sticky="NSEW")
        # Create table to display data
        data_df = DataStore.data

        self.data_table = Table(self.table_container, dataframe=data_df)
        self.data_table.autoResizeColumns()
        self.data_table.show()

    def refresh_table_data(self):
        res = tkMessageBox.askyesno(title="Are you sure you want to refresh the DB.",
                                    message="Are you sure that you want to refresh the DB.\n"
                                    "This will undo any changes that you made before saving your data. This includes CSV file that you have imported")

        if res == tkMessageBox.NO:
            return

        data_df = get_db_data()

        DataStore.data = data_df
        self.data_table.updateModel(TableModel(data_df))
        self.data_table.redraw()

    def export_data(self):
        output_file = tkFileDialog.askopenfilename()
        if not output_file:
            tkMessageBox.showerror(title="Export Failed",
                                   message="Export failed as no file was selected.")
            return

    def save_to_db(self):
        add_df_to_db(DataStore.data)

    def import_csv(self):
        # Get file to import
        input_file = tkFileDialog.askopenfilename()
        if not input_file.strip():
            tkMessageBox.showerror(title="Import Failed",
                                   message="Import failed as no file was selected.")
            return

        try:
            import_df = pd.read_csv(input_file)
        except ParserError:
            tkMessageBox.showerror(
                "The supplied file is not a valid CSV file, could not import.")

        if len(import_df) > 0:
            # Data was loaded.
            DataStore.data.reset_index(level=["id_product"], inplace=True)
            table_df = DataStore.data.append(import_df, ignore_index=False)
            table_df.set_index("id_product", inplace=True)

            DataStore.data = table_df
            self.data_table.updateModel(TableModel(table_df))
            self.data_table.redraw()

            tkMessageBox.showinfo(title="Import Successful",
                                  message="Import Completed Successfully!")
        else:
            tkMessageBox.showinfo(title="Import Failed",
                                  message="Input file did not have any CSV data so no data was added.")
def run_algo():
    print("run")
    global node_file, edge_file

    node_file = pd.read_csv(ent_node_loc.get())
    edge_file = pd.read_csv(ent_edge_loc.get())
    sample_size = int(ent_sample_size.get()) / 100

    adjacency_list = fileProcessor(edge_file, node_file)
    edge_list = adjtoedgelist(adjacency_list)

    global n
    n = len(adjacency_list)
    m = len(edge_list)

    print("Original Graph")
    print("len of al = ", n)
    print("len of el = ", m)

    rnAdj, rnEdge = randomNode(adjacency_list, sample_size)
    reAdj, reEdge = randomEdge(edge_list, sample_size)
    rwAdj, rwEdge = randomWalk(adjacency_list, sample_size)

    org = dig(adjacency_list)
    re = dig(reAdj)
    rn = dig(rnAdj)
    rw = dig(rwAdj)

    frm_dist = tk.Frame(frm_preview)
    frm_dist.pack(expand=tk.TRUE, fill=tk.BOTH)

    dist.clear()
    canvas = FigureCanvasTkAgg(fig, frm_dist)

    dist.plot(list(org.keys()), list(org.values()), label='Original Graph')
    dist.plot(list(rn.keys()), list(rn.values()), label="Random Node")
    dist.plot(list(re.keys()), list(re.values()), label="Random Edge")
    dist.plot(list(rw.keys()), list(rw.values()), label="Random Walk")
    dist.set_title("Smaple size : " + str(sample_size))
    dist.set_xlabel("Degree")
    dist.set_ylabel("Number of nodes")
    fig.legend(loc='upper right')
    canvas.draw()
    canvas.get_tk_widget().pack(side=tk.TOP, expand=tk.TRUE, fill=tk.BOTH)

    toolbar = NavigationToolbar2Tk(canvas, frm_dist)
    toolbar.update()
    canvas._tkcanvas.pack(side=tk.TOP, expand=tk.TRUE, fill=tk.BOTH)

    ## Generating reports

    g = {}
    # algorithms = ["Original graph","Random Node", "Random Edge", "Random Walk"]
    g["Original graph"] = (adjacency_list, edge_list)
    g["Random Node"] = (rnAdj, rnEdge)
    g["Random Edge"] = (reAdj, reEdge)
    g["Random Walk"] = (rwAdj, rwEdge)

    total_node = {}
    total_edge = {}
    max_degree = {}
    min_degree = {}
    avg_degree = {}

    for gr in g:
        adj, edge = g[gr]
        total_node[gr] = len(adj)
        total_edge[gr] = len(edge)
        d = cal_degree(adj)
        max_degree[gr] = max(d.values())
        min_degree[gr] = min(d.values())
        avg_degree[gr] = sum(list(d.values())) / len(d.values())
        # print("d : ", d)
        # print("avg_degree ", gr, " : ", avg_degree[gr])
        # print(gr, " -- ", len(adj), " -- ", len(edge))
    report["Total Nodes"] = report['Algorithm'].map(total_node)
    report["Total Edges"] = report['Algorithm'].map(total_edge)
    report["Average_Degree"] = report['Algorithm'].map(avg_degree)
    report["Maximum_Degree"] = report['Algorithm'].map(max_degree)
    report["Minimum_Degree"] = report['Algorithm'].map(min_degree)

    lbl_res = tk.LabelFrame(frm_result, text="Result")
    lbl_res.pack(expand=tk.TRUE, fill=tk.BOTH)

    pt = Table(lbl_res, dataframe=report)
    pt.show()
    pt.autoResizeColumns()
    pt.redraw()
Exemple #4
0
class RebalancingApp(Frame):
    def __init__(self, parent=None):
        self.parent = parent
        self.df = pd.DataFrame()
        self.new_df = pd.DataFrame()
        self.tickers = pd.DataFrame()
        
        super().__init__()
        self.invested_value = StringVar(value="0")
        self.add_invest_value = StringVar(value="0")
        # Create Main Window
        self.main = self.master
        self.main.title("Rabalancing Stocks")
        self.main.geometry("1024x768+100+100")
        self.top_frame = Frame(self.main)
        self.top_frame.pack(side ='top')
        
        # Menu Creation
        # File Menu
        self.menu = Menu(self.main)
        self.menu_file = Menu(self.menu, tearoff=0, font="* 12")
        # Default menu disable since there is no user data
        self.menu_file.add_command(label="Update Market Values", command=self.update_data, state="disable") 
        self.menu_file.add_separator()
        self.menu_file.add_command(label="Load User Data", command=self.load_user_data)
        self.menu_file.add_separator()
        # self.menu_file.add_command(label="Save to Excel", state="disable")
        # self.menu_file.add_separator()
        self.menu_file.add_command(label="Exit", command=self.quit)
        self.menu.add_cascade(label="File", menu=self.menu_file)

        # Strategies Menu
        self.s_var = IntVar(value=0)
        self.menu_strategies = Menu(self.menu, tearoff=0, font="* 12")
        self.menu_strategies.add_radiobutton(label="Equal weight", variable=self.s_var, value=1)
        self.menu_strategies.add_radiobutton(label="Market Cap", variable=self.s_var, value=2)
        # self.menu_strategies.add_radiobutton(label="P/E Ratio", variable=self.s_var, value=3)
        # Default Strategies menu disable since there is no data to calculate
        self.menu.add_cascade(label="Strategies", menu=self.menu_strategies, state="disable") 

        # Button to print out Strategies data
        self.invested_label_name = Label(self.top_frame, bg='#76EE00', font="* 20", text="Invesed Money($): ")
        self.invested_label_name.grid(row=0, column=0, padx=1, pady=1)
        self.invested_label = Label(self.top_frame, bg='#FFF8DC', font="* 20", width = 13, textvariable=self.invested_value)
        self.invested_label.grid(row=0, column=1, padx=1, pady=1)
        
        self.add_invest_name = Label(self.top_frame, bg='#76EE00', font="* 20", text="Extra Money($): ")
        self.add_invest_name.grid(row=0, column=2, padx=1, pady=1)
        self.add_invest_amount = Entry(self.top_frame, bg='#FFF8DC', font="* 20", width = 13, textvariable=self.add_invest_value)
        self.add_invest_amount.grid(row=0, column=3, padx=1, pady=1)
        
        self.button_rebalancing = Button(self.top_frame, text='Rebalancing', font="* 15", command=self.rebalancing, state="disable")
        self.button_rebalancing.grid(row=0, column=4, padx=0, pady=0)     

        # Add menu bar to main Window
        self.main.config(menu=self.menu)
        
        # Display Frame to top at Window
        self.display = Frame(self.main)
        self.display.pack(padx=1, pady=1, fill=BOTH, side='top', expand=1)
        
        # Display Progressbar to bottom at Window
        self.p_var = DoubleVar()
        self.progressbar = ttk.Progressbar(self.main, maximum=100, variable=self.p_var)
        self.progressbar.pack(padx=1, pady=1, side='bottom', fill='x')
        
# Functions
    # Window X Button overide
    # def on_closing():
    #     if messagebox.askokcancel("Quit", "Do you want to quit?"):
    #         root.destroy()

    def quit(self):
        if messagebox.askyesno("Exit","Do you want to quit the application?"):
            self.main.quit()

    def rebalancing(self):
        if self.s_var.get() == 0:
            messagebox.showerror("Error","Please, select your strategy!")
        
        elif self.s_var.get() == 1:
            self.equal_rebalancing()
            
        elif self.s_var.get() == 2:
            self.market_cap_rebalancing()
            
        # elif self.s_var.get() == 3:
        #     self.pe_ratio_rebalancing()
        
        else:
            messagebox.showerror("Critical","Something wrong!!!!!!!!")
        
# Rabalancing Functions    
    def invest_amount_calculation(self):
        # I have to fix when user input text instead intgeter.
        if self.add_invest_value.get() == "0":
            self.invest_amount = self.invested_temp_sum
        else:
            self.invest_amount = int(self.invested_temp_sum) + int(self.add_invest_amount.get())
        
    def equal_rebalancing(self):
        self.invest_amount_calculation()
        self.equal_df = pd.DataFrame()
        number_of_stocks = len(self.new_df.index)
        invest_amount_per_stock = self.invest_amount/number_of_stocks
        
        for i, price in enumerate(self.new_df['Current Price']):
            temp_series = pd.Series([invest_amount_per_stock/price], index=['Equal Rebalance'])
            temp_series = self.new_df.iloc[i].append(temp_series)
            self.equal_df = self.equal_df.append(temp_series, ignore_index=True)
        self.equal_df = self.equal_df[['Symbol', 'Description', 'Sector', 'Quantity', 'Equal Rebalance', 'Cost Basis Per Share', 'Market Cap', 'Current Price', 'P/E Ratio(PER)', 'P/B Ratio(PBR)']]
        # self.pt.clearData()
        self.pt = Table(self.display, dataframe=self.equal_df, showtoolbar=False, showstatusbar=False, editable=False, enable_menus=False)
        options = config.load_options()
        options = {'rowselectedcolor':None}
        config.apply_options(options, self.pt)
        self.pt.show()
        # Add color to indicate 'add' or 'sub' quantity to user. Green color for add. Red color for Sub.
        add_mask = self.equal_df['Quantity'] < self.equal_df['Equal Rebalance']
        self.pt.setColorByMask('Equal Rebalance', add_mask, '#7FFF00')
        sub_mask = self.equal_df['Quantity'] > self.equal_df['Equal Rebalance']
        self.pt.setColorByMask('Equal Rebalance', sub_mask, '#FF6EB4')
        
        # self.pt.redraw()
        self.pt.autoResizeColumns()
        
    def market_cap_rebalancing(self):
        self.invest_amount_calculation()
        self.cap_df = pd.DataFrame()
        total_market_cap = self.new_df['Market Cap'].sum()
        for i, cap in enumerate(self.new_df['Market Cap']):
            temp_series = pd.Series([self.invest_amount*cap/total_market_cap/self.new_df['Current Price'][i]], index=['Cap Rebalance'])
            temp_series = self.new_df.iloc[i].append(temp_series)
            self.cap_df = self.cap_df.append(temp_series, ignore_index=True)
        self.cap_df = self.cap_df[['Symbol', 'Description', 'Sector', 'Quantity', 'Cap Rebalance', 'Cost Basis Per Share', 'Market Cap', 'Current Price', 'P/E Ratio(PER)', 'P/B Ratio(PBR)']]
        
        self.pt = Table(self.display, dataframe=self.cap_df, showtoolbar=False, showstatusbar=False, editable=False, enable_menus=False)
        options = config.load_options()
        options = {'rowselectedcolor':None}
        config.apply_options(options, self.pt)
        self.pt.show()
        # Add color to indicate 'add' or 'sub' quantity to user. Green color for add. Red color for Sub.
        add_mask = self.cap_df['Quantity'] < self.cap_df['Cap Rebalance']
        self.pt.setColorByMask('Cap Rebalance', add_mask, '#7FFF00')
        sub_mask = self.cap_df['Quantity'] > self.cap_df['Cap Rebalance']
        self.pt.setColorByMask('Cap Rebalance', sub_mask, '#FF6EB4')
        # print(total_market_cap)
        self.pt.autoResizeColumns()
        
        
    # def pe_ratio_rebalancing(self):
    #     print('P/E Ratio')  
               
    def load_market_data(self):
        self.tickers = tickers_sp500(True)
        # self.tickers.set_index('Symbol', inplace=True)
        
    def load_user_data(self):
        _file = filedialog.askopenfilename(title="Choose csv file...",  \
            filetypes=(("csv", "*.csv"),("All", "*.*")), initialdir=r"C:\Users\baekh\OneDrive\Desktop\Python")
        try:
            self.df = pd.read_csv(_file, index_col=False)
            self.df = self.df.drop(columns=['Account Name/Number'])
            self.df = self.df.rename(columns={"Current Value":"Current Price"})
            # Keep only first row if there is duplications
            # self.df.drop_duplicates(subset=['Symbol'], inplace=True)
            # self.df = self.df.head()           
            self.pt = Table(self.display, dataframe=self.df, showtoolbar=False, showstatusbar=False, editable=False, enable_menus=False)
            options = config.load_options()
            options = {'rowselectedcolor':None}
            config.apply_options(options, self.pt)
            self.pt.show()
            self.pt.autoResizeColumns()
            # self.pt.redraw()
            # Update Menu status
            self.menu_file.entryconfig("Update Market Values", state="normal")
        except:
            pass
             
    def update_data(self):
        self.load_market_data()
        for i, symbol in enumerate(self.df['Symbol']):
            # Variable for display status of Progressive Bar
            self.p_var.set(100/len(self.df.index)*(i+1))
            self.progressbar.update()

            if symbol in self.tickers['Symbol'].values:
                # Loading live market data from yahoo finance
                data_from_yahoo = get_quote_data(symbol)
                # print(data_from_yahoo.keys())
                temp = pd.Series(
                    {'Symbol': symbol,
                    'Description': self.tickers.loc[self.tickers['Symbol'] == symbol]['Security'].item().strip(),
                    'Sector': self.tickers.loc[self.tickers['Symbol'] == symbol]['GICS Sector'].item().strip(),
                    'Cost Basis Per Share': self.df.loc[self.df['Symbol'] == symbol]['Cost Basis Per Share'].item().strip(),
                    'Quantity': self.df.loc[self.df['Symbol'] == symbol]['Quantity'].item(),
                    'Market Cap': data_from_yahoo['marketCap'],
                    'Current Price': data_from_yahoo['regularMarketPrice'],
                    'P/E Ratio(PER)': data_from_yahoo['trailingPE'] if 'trailingPE' in data_from_yahoo.keys() else None,
                    'P/B Ratio(PBR)': data_from_yahoo['priceToBook'] if 'priceToBook' in data_from_yahoo.keys() else None}
                    )
                self.new_df = self.new_df.append(temp, ignore_index=True)
        # print("Loading is completed")
        # Reorder Columns
        self.new_df = self.new_df[['Symbol', 'Description', 'Sector', 'Quantity', 'Cost Basis Per Share', 'Market Cap', 'Current Price', 'P/E Ratio(PER)', 'P/B Ratio(PBR)']]
        # first_column = self.new_df.pop('Symbol')
        # self.new_df.insert(0, 'Symbol', first_column)
        # self.pt.destroy()
        # self.pt.clearData()
        
        self.invested_temp_sum = 0
        for i in range(len(self.new_df)):
            self.invested_temp_sum += self.new_df['Quantity'][i] * self.new_df['Current Price'][i]
        self.invested_temp_sum = round(self.invested_temp_sum, 3) 
        self.invested_value.set(str(self.invested_temp_sum))
        self.pt = Table(self.display, dataframe=self.new_df, showtoolbar=False, showstatusbar=False, editable=False, enable_menus=False)
        options = config.load_options()
        options = {'rowselectedcolor':None}
        config.apply_options(options, self.pt)
        self.pt.show()
        self.pt.autoResizeColumns()
        # self.pt.redraw()
        
        # Update menu status
        self.menu.entryconfig("Strategies", state="normal") 
        # self.menu_file.entryconfig("Save to Excel", state="normal")
        self.button_rebalancing.config(state="normal")
Exemple #5
0
class PageTwo(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.configure(background='#c2dfff')
        for i in range(9):
            self.columnconfigure(i, weight=200, minsize=1)
            self.rowconfigure(i, weight=200, minsize=1)
        start_page = Button(self,
                            text="          בית",
                            command=lambda: controller.show_frame(StartPage),
                            font=('Arial', 14),
                            bg='#c2dfff',
                            relief="flat",
                            activebackground="#F5F5DC",
                            highlightbackground="Black",
                            cursor="hand2").grid(row=1,
                                                 column=0,
                                                 columnspan=1,
                                                 sticky=W)
        page_one = Button(self,
                          text="  הוספת מטופל",
                          command=lambda: controller.show_frame(PageOne),
                          font=('Arial', 14),
                          bg='#c2dfff',
                          relief="flat",
                          activebackground="#F5F5DC",
                          highlightbackground="Black",
                          cursor="hand2").grid(row=2,
                                               column=0,
                                               columnspan=1,
                                               sticky=W)
        page_three = Button(self,
                            text="  פילוח מטופלים",
                            command=lambda: controller.show_frame(PageThree),
                            font=('Arial', 14),
                            bg='#c2dfff',
                            relief="flat",
                            activebackground="#F5F5DC",
                            highlightbackground="Black",
                            cursor="hand2").grid(row=3,
                                                 column=0,
                                                 columnspan=1,
                                                 sticky=W)

        self.controller = controller
        label = Label(self,
                      text=":ביקורי המטופלים ",
                      font=('Arial', 22, 'bold'),
                      bg='#c2dfff')
        label.grid(row=0, column=4, columnspan=2)
        self.frame = Frame(self, relief=RAISED, borderwidth=1, bg='#F5F5DC')
        self.frame.grid(
            row=5,
            column=5,
            columnspan=6,
        )

        # here we present the tables

        self.id_entry = StringVar()

        Label(self, text=":הכנס תעודת זהות", font=('Arial', 13),
              bg='#c2dfff').grid(row=2, column=5, columnspan=1, sticky=W)
        Entry(self, textvariable=self.id_entry, width="30").grid(row=2,
                                                                 column=4,
                                                                 sticky=E)
        Button(self, text='חפש מטופל', command=self.show_option).grid(row=2,
                                                                      column=3,
                                                                      sticky=E)
        Button(self,
               text="אפס",
               font=('Arial', 13),
               width="10",
               height="2",
               bg="grey",
               command=self.reset).grid(row=10,
                                        column=2,
                                        columnspan=1,
                                        sticky=E)

        self.new_dataframe_visits = visit_df.copy(deep=True)
        self.new_dataframe_visits.rename(columns={
            'id':
            'ת.ז',
            'visit_num':
            'מספר ביקור',
            'visit_date':
            'תאריך ביקור',
            'AH_regular':
            'AH regular dose',
            'AH_increase':
            'AH increase',
            'OMA_300':
            'OMA 300',
            'OMA_450':
            'OMA 450',
            'tiredness':
            'עייפות',
            'Breath_problems':
            'קשיי נשימה',
            'Swallowing_diff':
            'קשיי בליעה',
            'Abdominal_pain':
            'כאבי בטן',
            'attack_num':
            'מספר התקף',
            'IS_currently_active':
            'האם בהתקף',
            'Autopic_back':
            'רקע אטופי',
            'autoimmune_back':
            'רקע אוטואימוני',
            'disease_begin_date':
            'תאריך תחילת מחלה'
        },
                                         inplace=True)

        amudot = [
            'AH regular dose', 'AH increase', 'steroids', 'Cyclosporin',
            'Singular', 'OMA 300', 'OMA 450', 'angioedma', 'Urticaria',
            'עייפות', 'קשיי נשימה', 'קשיי בליעה', 'כאבי בטן', 'האם בהתקף',
            'רקע אטופי', 'רקע אוטואימוני'
        ]
        for j in amudot:
            for index, row in self.new_dataframe_visits.iterrows():
                if self.new_dataframe_visits[j][index] == 1:
                    self.new_dataframe_visits[j][index] = 'Yes'
                elif self.new_dataframe_visits[j][index] == 0:
                    self.new_dataframe_visits[j][index] = 'No'

        self.table_frame = Frame(self,
                                 relief=SUNKEN,
                                 borderwidth=2,
                                 bg='#F5F5DC')
        self.table_frame.grid(row=4, column=2, columnspan=12)
        self.pt = Table(self.table_frame,
                        dataframe=self.new_dataframe_visits,
                        height=350,
                        width=1000)

        self.pt.autoResizeColumns()
        self.pt.show()

    def show_option(self):
        global visit_df

        self.new_dataframe_visits = visit_df.copy(deep=True)
        self.new_dataframe_visits.rename(columns={
            'id':
            'ת.ז',
            'visit_num':
            'מספר ביקור',
            'visit_date':
            'תאריך ביקור',
            'AH_regular':
            'AH regular dose',
            'AH_increase':
            'AH increase',
            'OMA_300':
            'OMA 300',
            'OMA_450':
            'OMA 450',
            'tiredness':
            'עייפות',
            'Breath_problems':
            'קשיי נשימה',
            'Swallowing_diff':
            'קשיי בליעה',
            'Abdominal_pain':
            'כאבי בטן',
            'attack_num':
            'מספר התקף',
            'IS_currently_active':
            'האם בהתקף',
            'Autopic_back':
            'רקע אטופי',
            'autoimmune_back':
            'רקע אוטואימוני',
            'disease_begin_date':
            'תאריך תחילת מחלה'
        },
                                         inplace=True)

        amudot = [
            'AH regular dose', 'AH increase', 'steroids', 'Cyclosporin',
            'Singular', 'OMA 300', 'OMA 450', 'angioedma', 'Urticaria',
            'עייפות', 'קשיי נשימה', 'קשיי בליעה', 'כאבי בטן', 'האם בהתקף',
            'רקע אטופי', 'רקע אוטואימוני'
        ]
        for j in amudot:
            for index, row in self.new_dataframe_visits.iterrows():
                if self.new_dataframe_visits[j][index] == 1:
                    self.new_dataframe_visits[j][index] = 'Yes'
                elif self.new_dataframe_visits[j][index] == 0:
                    self.new_dataframe_visits[j][index] = 'No'

        identifier = self.id_entry.get()  # get option
        try:
            identifier = int(identifier)
            if (len(visit_df.loc[visit_df['id'] == identifier]) > 0):
                self.pt.close()
                self.pt = Table(self.table_frame,
                                dataframe=self.new_dataframe_visits.loc[
                                    visit_df.id == int(identifier)])
                self.pt.show()
            else:
                tkm.showinfo("ID Not Found", "מטופל לא קיים במערכת")
                self.id_entry.set("")
        except:
            tkm.showinfo("ID Not Found", "מטופל לא קיים במערכת")
            self.id_entry.set("")

    def reset(self):
        self.id_entry.set("")
        self.pt.close()
        self.pt = Table(self.table_frame, dataframe=self.new_dataframe_visits)
        self.pt.show()
Exemple #6
0
class DataFrame(tk.Frame):
    label = "Data"

    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        self.columnconfigure(index=0, weight=1)
        self.rowconfigure(index=1, weight=1)

        self.create_widgets()

    def show(self):
        self.tkraise()

    def create_widgets(self):
        self.toolbar = tk.Frame(self)
        self.toolbar.grid(row=0, column=0, padx=12, pady=3, sticky="NSEW")
        for col in range(12):
            self.toolbar.columnconfigure(index=col, weight=1)

        self.save_button = tk.Button(
            self.toolbar, text="Store in vault", command=self.save_to_db)
        self.export_button = tk.Button(
            self.toolbar, text="Export File", command=self.export_data)
        self.import_button = tk.Button(
            self.toolbar, text="Import CSV", command=self.import_csv)
        self.refresh_button = tk.Button(
            self.toolbar, text="Refresh DB", command=self.refresh_table_data)

        self.save_button.grid(row=0, column=12)
        self.export_button.grid(row=0, column=11)
        self.import_button.grid(row=0, column=10)
        self.refresh_button.grid(row=0, column=9)

        self.table_container = tk.Frame(self)
        self.table_container = tk.Frame(self) self.table_container.grid(row=1, column=0, sticky="")
        
        data_df = Vault.data

        self.data_table = Table(self.table_container, dataframe=data_df)
        self.data_table.autoResizeColumns()
        self.data_table.show()

    def refresh_table_data(self):
        res = tkMessageBox.askyesno(title="Ready to reboot DB.",
                                    message="Ready to reboot DB.\n"
                                    "Undo")

        if res == tkMessageBox.NO:
            return

        data_df = get_db_data()

        Vault.data = data_df
        self.data_table.updateModel(TableModel(data_df))
        self.data_table.redraw()

    def export_data(self):
        output_file = tkFileDialog.askopenfilename()
        if not output_file:
            tkMessageBox.showerror(title="Error, Failed!", message="...")
            return

    def save_to_db(self):
        add_df_to_db(Vault.data)

    def import_csv(self):
        input_file = tkFileDialog.askopenfilename()
        if not input_file.strip():
            tkMessageBox.showerror(title="Error, Failed!", message="...")
            return

        try:
            import_df = pd.read_csv(input_file)
        except ParserError:
            tkMessageBox.showerror("Failed, Try again!.")

        if len(import_df) > 0:
            Vault.data.reset_index(level=["id_product"], inplace=True)
            table_df = Vault.data.append(import_df, ignore_index=False)
            table_df.set_index("id_product", inplace=True)

            Vault.data = table_df
            self.data_table.updateModel(TableModel(table_df))
            self.data_table.redraw()

            tkMessageBox.showinfo(title="Done",message="Pass")
        else:
            tkMessageBox.showinfo(title="Error, Failed!", message="...")