def buy_command(self): # item_name = None affordable = None print(recent_selection['selected']) item_name = self.get_tree_item_name(recent_selection['selected'][0]) if item_name is not None: affordable = user_info['char'].buy_sell(item_name, 'buy', self.conn) currency_dict = static_functions.convert_currency( user_info['char'].currency) self.update_currency_treeview(currency_dict) self.root.update() if affordable: self.buy_item_gui(recent_selection['selected']) if not database.in_inventory(self.conn, user_info['inv'], item_name, '+'): user_info['char'].add_item_db(self.conn, item_name, user_info['acc'].id, user_info['inv']) self.check_value_and_toggle()
def populate_inventory_treeview_db(self, db_char_items): for item in db_char_items: converted_value = static_functions.convert_currency(item[2]) cur_type = static_functions.inspecto_gadget(converted_value) item_id = self.inventory_treeview.insert('', 'end', text=item[0]) static_functions.img_tag(self.inventory_treeview, item_id, cur_type) self.inventory_treeview.set(item_id, 'quantity', item[1]) self.inventory_treeview.set(item_id, 'unit_value', converted_value[cur_type])
def new_tree_item(self, some_treeview, some_callback): item_name = some_treeview.item(some_callback[0])['text'] item_value = sql.execute_fetchone_sql(self.conn, sql.query_store_item_value(), item_name) converted_value = static_functions.convert_currency(item_value[0]) cur_type = static_functions.inspecto_gadget(converted_value) new_item = self.inventory_treeview.insert( '', 'end', text=some_treeview.item(some_callback[0])['text']) static_functions.img_tag(self.inventory_treeview, new_item, cur_type) self.new_inventory_quantity(new_item) self.new_inventory_unit_value(new_item, converted_value[cur_type])
def sell_command(self): tup = inv_selected['selected'] item = self.inventory_treeview.item(tup, 'text') user_info['char'].buy_sell(item, 'sell', self.conn) currency_dict = static_functions.convert_currency( user_info['char'].currency) self.update_currency_treeview(currency_dict) self.sell_item_gui(inv_selected['selected']) self.root.update() if not database.in_inventory(self.conn, user_info['inv'], item, '-'): database.delete_item(self.conn, item, user_info['inv'])
def add_currency_command(self, cur_type): answer = simpledialog.askinteger( 'Input', f'How much {cur_type} do you want to add?', minvalue=1, maxvalue=100000) if cur_type == 'gold': answer = answer * 100 elif cur_type == 'silver': answer = answer * 10 user_info['char'].currency += answer user_info['char'].update_currency_db(self.conn) new_cur_dict = static_functions.convert_currency( user_info['char'].currency) self.update_currency_treeview(new_cur_dict)
def subtract_currency_command(self, cur_type): answer = simpledialog.askinteger( 'Input', f'How much {cur_type} do you want to add?', minvalue=1, maxvalue=100000) if cur_type == 'gold': answer = answer * 100 elif cur_type == 'silver': answer = answer * 10 if answer > user_info['char'].currency: error_box.cant_remove_that_much() else: user_info['char'].currency -= answer user_info['char'].update_currency_db(self.conn) new_cur_dict = static_functions.convert_currency( user_info['char'].currency) self.update_currency_treeview(new_cur_dict)
def __init__(self, root): self.conn = database.create_connection(database.db) MainWindow.__init__(self, root) self.currency_dict = static_functions.convert_currency( user_info['char'].currency) self.gen_frame = LabelFrame(root, text='General Store') self.bs_frame = LabelFrame(root, text='Blacksmith') self.ship_frame = LabelFrame(root, text='Shipyard') self.stable_frame = LabelFrame(root, text='Stables') # Treeviews self.shipyard_treeview = ttk.Treeview( self.ship_frame ) # ttk.Treeview(parent) Sets a treeview to a given parent window self.general_store_treeview = ttk.Treeview(self.gen_frame) self.blacksmith_treeview = ttk.Treeview(self.bs_frame) self.stables_treeview = ttk.Treeview(self.stable_frame) self.inventory_treeview = ttk.Treeview(root) self.currency_treeview = ttk.Treeview(root) # List of store treeviews self.store_treeviews = [ self.shipyard_treeview, self.stables_treeview, self.blacksmith_treeview, self.general_store_treeview ] recent_selection['selected'] = 'None' inv_selected['selected'] = 'none' # Scrollbars self.gen_vsb = ttk.Scrollbar(self.gen_frame, orient="vertical", command=self.general_store_treeview.yview) self.bs_vsb = ttk.Scrollbar(self.bs_frame, orient="vertical", command=self.blacksmith_treeview.yview) self.stable_vsb = ttk.Scrollbar(self.stable_frame, orient="vertical", command=self.stables_treeview.yview) self.general_store_treeview.configure(yscrollcommand=self.gen_vsb.set) self.blacksmith_treeview.configure(yscrollcommand=self.bs_vsb.set) self.stables_treeview.configure(yscrollcommand=self.stable_vsb.set) # TODO: Refactor menu names, they are currently s***e. # Menus store_popup_menu = Menu(tearoff=False) store_popup_menu.add_command(label='Add Item', command=self.add_command) inventory_popup_menu = Menu(tearoff=False) inventory_popup_menu.add_command(label='Subtract One', command=self.subtract_one_command) inventory_popup_menu.add_command(label='Remove Item', command=self.remove_command) inventory_popup_menu.add_command(label='Update Quantity', command=self.update_quantity_command) currency_popup_menu = Menu(tearoff=False) update_submenu = Menu(tearoff=False) add_submenu = Menu(tearoff=False) subtract_submenu = Menu(tearoff=False) update_submenu.add_command( label='Gold', command=lambda: self.update_currency_command('gold')) update_submenu.add_command( label='Silver', command=lambda: self.update_currency_command('silver')) update_submenu.add_command( label='Copper', command=lambda: self.update_currency_command('copper')) add_submenu.add_command( label='Gold', command=lambda: self.add_currency_command('gold')) add_submenu.add_command( label='Silver', command=lambda: self.add_currency_command('silver')) add_submenu.add_command( label='Copper', command=lambda: self.add_currency_command('copper')) subtract_submenu.add_command( label='Gold', command=lambda: self.subtract_currency_command('gold')) subtract_submenu.add_command( label='Silver', command=lambda: self.subtract_currency_command('silver')) subtract_submenu.add_command( label='Copper', command=lambda: self.subtract_currency_command('copper')) currency_popup_menu.add_cascade(label='Update', menu=update_submenu) currency_popup_menu.add_cascade(label='Add', menu=add_submenu) currency_popup_menu.add_cascade(label='Subtract', menu=subtract_submenu) def select_item(event, some_tree): iid = some_tree.identify_row(event.y) if iid is not None: print(iid) some_tree.selection_set(iid) return True def general_store_popup(event): if select_item(event, self.general_store_treeview): store_popup_menu.post(event.x_root, event.y_root) def blacksmith_popup(event): if select_item(event, self.blacksmith_treeview): store_popup_menu.post(event.x_root, event.y_root) def stables_popup(event): if select_item(event, self.stables_treeview): store_popup_menu.post(event.x_root, event.y_root) def shipyard_popup(event): if select_item(event, self.shipyard_treeview): store_popup_menu.post(event.x_root, event.y_root) def inventory_popup(event): if select_item(event, self.inventory_treeview): inventory_popup_menu.post(event.x_root, event.y_root) def currency_popup(event): currency_popup_menu.post(event.x_root, event.y_root) def format_store(some_treeview): some_treeview.tag_configure('gold', image=gold_img) some_treeview.tag_configure('silver', image=silver_img) some_treeview.tag_configure('copper', image=copper_img) some_treeview.config(columns='price') some_treeview.column('price', width=85, anchor='center') some_treeview.column('#0', width=150) some_treeview.heading('price', text='Price') some_treeview.heading('#0', text='Item') for treeview in self.store_treeviews: format_store(treeview) # TODO: Verify purpose of error handling. try: self.populate_all_trees() except TclError: pass # Creates the initial currency item. If item exists, updates treeview instead. # TODO: Verify that error handling is both necessary and used correctly. try: self.currency_treeview.insert('', 'end', 'gold', text=self.currency_dict['gp']) except TclError: print('tcl error') self.update_currency_treeview(self.currency_dict) # Binds self.shipyard_treeview.bind('<<TreeviewSelect>>', self.shipyard_callback) self.blacksmith_treeview.bind('<<TreeviewSelect>>', self.blacksmith_callback) self.stables_treeview.bind('<<TreeviewSelect>>', self.stables_callback) self.inventory_treeview.bind('<<TreeviewSelect>>', self.inventory_callback) self.general_store_treeview.bind('<<TreeviewSelect>>', self.general_store_callback) # for treeview in self.store_treeviews: # treeview.bind('<Button-3>', general_store_popup) self.general_store_treeview.bind('<Button-3>', general_store_popup) self.blacksmith_treeview.bind('<Button-3>', blacksmith_popup) self.stables_treeview.bind('<Button-3>', stables_popup) self.shipyard_treeview.bind('<Button-3>', shipyard_popup) self.inventory_treeview.bind('<Button-3>', inventory_popup) self.currency_treeview.bind('<Button-3>', currency_popup) # General grid formatting self.general_store_treeview.grid(row=0, column=0) self.blacksmith_treeview.grid(row=0, column=0) self.stables_treeview.grid(row=0, column=0) self.shipyard_treeview.grid(row=0, column=0) self.gen_vsb.grid(row=0, column=1, sticky='ns') self.bs_vsb.grid(row=0, column=1, sticky='ns') self.stable_vsb.grid(row=0, column=1, sticky='ns') self.gen_frame.grid(row=0, column=0) self.bs_frame.grid(row=0, column=1) self.stable_frame.grid(row=0, column=2) self.ship_frame.grid(row=0, column=3) # self.general_store_treeview.grid(row=0, column=0) # self.blacksmith_treeview.grid(row=0, column=1) # self.stables_treeview.grid(row=0, column=2) # self.shipyard_treeview.grid(row=0, column=3) self.inventory_treeview.grid(row=3, columnspan=4, sticky=W + E) self.currency_treeview.grid(row=2, columnspan=4) # Currency formatting self.currency_treeview.config(columns=['silver', 'copper'], height=1) self.currency_treeview.column('#0', width=55, anchor='center') self.currency_treeview.column('silver', width=55, anchor='center') self.currency_treeview.column('copper', width=65, anchor='center') self.currency_treeview.heading('#0', text='Gold', image=gold_img) self.currency_treeview.heading('silver', text='Silver', image=silver_img) self.currency_treeview.heading('copper', text='Copper', image=copper_img) self.currency_treeview.set('gold', 'silver', self.currency_dict['sp']) self.currency_treeview.set('gold', 'copper', self.currency_dict['cp']) # Inventory formatting self.inventory_treeview.tag_configure('gold', image=gold_img) self.inventory_treeview.tag_configure('silver', image=silver_img) self.inventory_treeview.tag_configure('copper', image=copper_img) self.inventory_treeview.config(columns=('quantity', 'unit_value')) self.inventory_treeview.column('quantity', width=2, anchor='center') self.inventory_treeview.heading('quantity', text='Quantity') self.inventory_treeview.column('unit_value', width=55, anchor='center') self.inventory_treeview.heading('unit_value', text='Unit Value') self.inventory_treeview.column('#0', width=700) self.inventory_treeview.heading('#0', text='Item') # Buttons self.buy = Button(text='Buy', bg='gray', command=self.buy_command) self.buy.grid(row=1, columnspan=4, sticky=W + E) self.sell = Button(text='Sell', bg='gray', activebackground='green', command=self.sell_command) self.sell.grid(row=4, columnspan=4, sticky=N + W + E) self.logout_button = Button(text='Log-out', bg='gray', command=self.logout_command) self.logout_button.grid(row=5, column=0, pady=50, sticky=S + W) self.dashboard_page_character_select_button = Button( text='Character Selection', bg='gray', command=self.char_select_command) self.dashboard_page_character_select_button.grid(row=5, column=3, pady=50, sticky=S + E) self.populate_inventory() cur_size = self.screen_size() # TODO: Magic numbers are bad mkay. if cur_size['h'] != 647: self.center([1019, 647])