-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontrols_panel.py
53 lines (40 loc) · 2.21 KB
/
controls_panel.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
from tkinter import Entry, Frame, Label, Tk, ttk
from typing import Callable
from coin_manager import CoinManager
import inject
from purchase_manager import PurchaseManager
from singleton_metaclass import SingletonMeta
class ControlsPanel(metaclass=SingletonMeta):
@inject.autoparams()
def __init__(self, purchase_manager: PurchaseManager, coin_manager: CoinManager):
self.purchase_manager = purchase_manager
self.coin_manager = coin_manager
def create(self, root: Tk, update_callback: Callable[[], None]) -> None:
self.update_callback = update_callback
controls_frame = Frame(root)
controls_frame.pack(fill="x", padx=10, pady=(0, 10))
Label(controls_frame, text="Amount in BRL:").grid(row=0, column=0, padx=(0, 10), sticky="w")
self.amount_entry = Entry(controls_frame)
self.amount_entry.grid(row=0, column=1, padx=(0, 10), sticky="w" + "e")
self.crypto_combobox = ttk.Combobox(controls_frame, state="readonly")
self.crypto_combobox.grid(row=0, column=2, padx=5, pady=5, sticky="w" + "e")
self.populate_combobox()
buy_button = ttk.Button(controls_frame, text="Buy", command=self.buy_selected_crypto)
buy_button.grid(row=0, column=3, padx=5, pady=5, sticky="w" + "e")
sell_button = ttk.Button(controls_frame, text="Sell", command=self.sell_selected_crypto)
sell_button.grid(row=0, column=4, padx=5, pady=5, sticky="w" + "e")
def populate_combobox(self) -> None:
capitalized_cryptos = [crypto.capitalize() for crypto in self.coin_manager.get_available_coins()]
self.crypto_combobox['values'] = capitalized_cryptos
if capitalized_cryptos:
self.crypto_combobox.current(0)
def buy_selected_crypto(self) -> None:
selected_crypto = self.crypto_combobox.get().lower()
amount = float(self.amount_entry.get())
self.purchase_manager.buy_crypto(selected_crypto, amount)
self.update_callback()
def sell_selected_crypto(self) -> None:
selected_crypto = self.crypto_combobox.get().lower()
amount = float(self.amount_entry.get())
self.purchase_manager.sell_crypto(selected_crypto, amount)
self.update_callback()