class Main(Ui_MainWindow, QtWidgets.QMainWindow): def __init__(self): super().__init__() self.about: About = None self.norm_table: Dict[int:float] = None self.btc_table: Dict[int:float] = None self.num_from_c = None self.norm_rates() self.init_ui() self.signals() self.separator(1) self.cc_show() def init_ui(self): self.setupUi(self) self.setFixedSize(290, 200) self.menuSeparator.setToolTipsVisible(True) self.actiontext.setToolTip('By default it\'s Dot') self.show() def signals(self): self.btc.triggered.connect(self.cc_show) self.exchange.clicked.connect(self.change_rates) self.btc_rates_btn.clicked.connect(self.btc_rates) self.firstC.currentIndexChanged.connect(self.norm_operations) self.secondC.currentIndexChanged.connect(self.norm_operations) self.secondC_2.currentIndexChanged.connect(self.btc_operations) self.firstCINP.textChanged.connect(self.norm_operations) self.firstCINP_2.textChanged.connect(self.btc_operations) self.actionRates.triggered.connect(self.norm_rates) self.actionDot.triggered.connect(lambda: self.separator(1)) self.actionComma.triggered.connect(lambda: self.separator(22)) self.actionAbout.triggered.connect(self.initiate_about) @property def index_first_c(self) -> int: return self.firstC.currentIndex() @property def index_second_c(self) -> int: return self.secondC.currentIndex() @property def index_second_c_btc(self) -> int: return self.secondC_2.currentIndex() def change_rates(self): index_one, index_two = self.index_first_c, self.index_second_c self.secondC.setCurrentIndex(index_one) self.firstC.setCurrentIndex(index_two) def norm_rates(self): try: params_for_var = 'USD,BGN,RUB,HRK,INR,NOK,PLN,TRY' request_api = requests.get( f'https://api.exchangeratesapi.io/latest?symbols={params_for_var}', timeout=2) norm_value = request_api.json() except requests.ConnectionError: QtWidgets.QMessageBox.critical( self, 'Connection Error', 'There was a network error.' '\nTry to download the rates manually' '\nby pressing <Rates> button in <Help> menu') return None except: return None self.norm_table = { 0: 1, 1: norm_value['rates']['USD'], 2: norm_value['rates']['BGN'], 3: norm_value['rates']['RUB'], 4: norm_value['rates']['HRK'], 5: norm_value['rates']['INR'], 6: norm_value['rates']['NOK'], 7: norm_value['rates']['PLN'], 8: norm_value['rates']['TRY'], } def btc_rates(self): try: request_api = requests.get('https://blockchain.info/ticker') btc_value = request_api.json() except requests.ConnectionError: QtWidgets.QMessageBox.critical( self, 'Connection Error', 'There was a network error.' '\nTry to download the rates manually' '\nby pressing <Rates> button in <Help> menu') return None except: return None self.btc_table = { 0: btc_value['EUR']['last'], 1: btc_value['USD']['last'], 2: btc_value['USD']['last'], 3: btc_value['RUB']['last'], 4: btc_value['INR']['last'], } def norm_operations(self): if len(self.firstCINP.text()) == 0: self.secondCOUT.clear() return None try: str_inp = self.firstCINP.text() self.num_from_c = float(str_inp.replace(',', '.')) out = self.rates_return() format_and_round = format(round(out, 3), ',') self.secondCOUT.setText(format_and_round) except: return None def btc_operations(self): if len(self.firstCINP_2.text()) == 0: self.secondCOUT_2.clear() return None try: str_inp = self.firstCINP_2.text() self.num_from_c = float(str_inp.replace(',', '.')) out = self.btc_return() format_and_round = format(round(out, 3), ',') self.secondCOUT_2.setText(format_and_round) except: return None def rates_return(self) -> float: return (self.num_from_c * self.norm_table[self.index_second_c] ) / self.norm_table[self.index_first_c] def btc_return(self) -> float: if self.secondC_2.currentIndex() == 2: return (self.num_from_c * self.btc_table[0]) * self.norm_table[2] return self.num_from_c * self.btc_table[self.index_second_c_btc] def separator(self, sep: int): var = QtGui.QDoubleValidator( QtCore.QLocale.setDefault(QtCore.QLocale(sep))) self.firstCINP.clear() self.secondCOUT.clear() self.firstCINP_2.clear() self.secondCOUT_2.clear() self.firstCINP.setValidator(var) self.firstCINP_2.setValidator(var) def cc_show(self): if self.btc.isChecked(): self.frame_8.show() self.line.show() self.setFixedSize(290, 370) self.btc_rates() else: self.frame_8.close() self.line.close() self.firstCINP_2.clear() self.secondCOUT_2.clear() self.setFixedSize(290, 200) def initiate_about(self): self.about = About() self.about.setFixedSize(398, 280) self.about.show()