RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1609951
Accepted
dynamic.aerospace.inc
dynamic.aerospace.inc
Asked:2025-04-06 08:41:31 +0000 UTC2025-04-06 08:41:31 +0000 UTC 2025-04-06 08:41:31 +0000 UTC

通过公式处理json数据并输入数据到QTabWidget表中时出错

  • 772

我编写了一个代码来与币安上的硬币价格数据进行交互,该程序接收一个包含所有硬币价值的.json
文件作为输入。 之后它将这些数据加载到第二个表中。

用户必须输入公式,lineEdit并且公式及其结果应该出现在第二个表中,但由于某种原因,即使对于正确的公式,代码也会返回错误。
如何修复这个问题?

BinanceTracker.py:

from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.QtWidgets import QTableWidgetItem, QMessageBox
from data_loader import load_data_to_table  # Import the data loader


class Ui_BinanceTracker(object):
    def setupUi(self, BinanceTracker):
        BinanceTracker.setObjectName("BinanceTracker")
        BinanceTracker.resize(640, 480)
        BinanceTracker.setStyleSheet("QPushButton {\n"
                                      "    height: 50px; \n"
                                      "    width: 120px;\n"
                                      "    font: 9pt \"Segoe UI\";\n"
                                      "}\n"
                                      "QLineEdit {\n"
                                      "    height: 50px; \n"
                                      "    width: 120px; \n"
                                      "    font: 9pt \"Segoe UI\";\n"
                                      "}\n"
                                      "")
        self.centralwidget = QtWidgets.QWidget(parent=BinanceTracker)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.tabWidget = QtWidgets.QTabWidget(parent=self.centralwidget)
        self.tabWidget.setObjectName("tabWidget")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.tab)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.tableWidget = QtWidgets.QTableWidget(parent=self.tab)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(2)
        self.tableWidget.setHorizontalHeaderLabels(["Формула", "Результат"])
        self.tableWidget.setRowCount(0)
        self.gridLayout_2.addWidget(self.tableWidget, 0, 0, 1, 2)
        self.groupBox = QtWidgets.QGroupBox(parent=self.tab)
        self.groupBox.setObjectName("groupBox")
        self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox)
        self.gridLayout_4.setObjectName("gridLayout_4")
        self.lineEdit = QtWidgets.QLineEdit(parent=self.groupBox)
        self.lineEdit.setObjectName("lineEdit")
        self.gridLayout_4.addWidget(self.lineEdit, 0, 0, 1, 1)
        self.pushButton = QtWidgets.QPushButton(parent=self.groupBox)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout_4.addWidget(self.pushButton, 0, 1, 1, 1)
        self.pushButton_3 = QtWidgets.QPushButton(parent=self.groupBox)
        self.pushButton_3.setObjectName("pushButton_3")
        self.gridLayout_4.addWidget(self.pushButton_3, 0, 2, 1, 1)
        self.gridLayout_2.addWidget(self.groupBox, 1, 0, 1, 2)
        self.groupBox_2 = QtWidgets.QGroupBox(parent=self.tab)
        self.groupBox_2.setObjectName("groupBox_2")
        self.gridLayout_5 = QtWidgets.QGridLayout(self.groupBox_2)
        self.gridLayout_5.setObjectName("gridLayout_5")
        self.lineEdit_2 = QtWidgets.QLineEdit(parent=self.groupBox_2)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.gridLayout_5.addWidget(self.lineEdit_2, 0, 0, 1, 1)
        self.lineEdit_3 = QtWidgets.QLineEdit(parent=self.groupBox_2)
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.gridLayout_5.addWidget(self.lineEdit_3, 0, 1, 1, 1)
        self.pushButton_2 = QtWidgets.QPushButton(parent=self.groupBox_2)
        self.pushButton_2.setObjectName("pushButton_2")
        self.gridLayout_5.addWidget(self.pushButton_2, 0, 2, 1, 1)
        self.gridLayout_2.addWidget(self.groupBox_2, 2, 0, 1, 2)
        self.tabWidget.addTab(self.tab, "")
        self.tab_2 = QtWidgets.QWidget()
        self.tab_2.setObjectName("tab_2")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.tab_2)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.tableWidget_2 = QtWidgets.QTableWidget(parent=self.tab_2)
        self.tableWidget_2.setObjectName("tableWidget_2")
        self.tableWidget_2.setColumnCount(2)
        self.tableWidget_2.setHorizontalHeaderLabels(["Пара", "Цена"])
        self.tableWidget_2.setRowCount(0)
        self.gridLayout_3.addWidget(self.tableWidget_2, 0, 0, 1, 1)
        self.tabWidget.addTab(self.tab_2, "")
        self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
        BinanceTracker.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(parent=BinanceTracker)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 22))
        self.menubar.setObjectName("menubar")
        BinanceTracker.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(parent=BinanceTracker)
        self.statusbar.setObjectName("statusbar")
        BinanceTracker.setStatusBar(self.statusbar)

        self.retranslateUi(BinanceTracker)
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(BinanceTracker)

        # Load data into tableWidget_2
        num_pairs_per_row = 6  # Change this to the desired number of pairs per row
        load_data_to_table(self.tableWidget_2, 'price.json', num_pairs_per_row)

        # Connect the pushButton to a function that will handle the formula
        self.pushButton.clicked.connect(self.calculate_formula)

    def calculate_formula(self):
        # Получаем формулу из lineEdit
        formula = self.lineEdit.text().strip()

        # Разделяем формулу на части (например, ETHBTC*BNBBTC -> ['ETHBTC', 'BNBBTC'])
        parts = formula.replace(' ', '').split('+')  # Сначала разбиваем по '+'

        # Инициализируем результат
        result = 0.0
        valid_formula = True

        # Вычисляем результат
        for part in parts:
            sub_parts = part.split('-')  # Разбиваем по '-'
            sub_result = 0.0
            for sub_part in sub_parts:
                if '*' in sub_part or '/' in sub_part:  # Если есть умножение или деление
                    # Разбиваем по '*' и '/'
                    factors = []
                    for factor in sub_part.replace('-', ' -').replace('+', ' +').split():
                        if factor:  # Проверяем, что не пустая строка
                            factors.append(factor)
                    # Вычисляем результат для текущей подчасти
                    try:
                        sub_result = eval('*'.join(factors))  # Используем eval для вычисления
                    except Exception as e:
                        valid_formula = False
                        break
                else:
                    # Если это просто монета, ищем ее цену
                    found = False
                    for row_index in range(self.tableWidget_2.rowCount()):
                        for col_index in range(0, self.tableWidget_2.columnCount(), 2):
                            if self.tableWidget_2.item(row_index, col_index) and self.tableWidget_2.item(row_index,
                                                                                                         col_index).text() == sub_part:
                                price_item = self.tableWidget_2.item(row_index, col_index + 1)
                                if price_item:
                                    sub_result += float(price_item.text())
                                    found = True
                                break
                    if not found:
                        valid_formula = False
                        break

            result += sub_result

        # Если формула корректна, добавляем результат в tableWidget
        if valid_formula:
            current_row_count = self.tableWidget.rowCount()
            self.tableWidget.setRowCount(current_row_count + 1)  # Увеличиваем количество строк

            # Заполняем строку формулой и результатом
            self.tableWidget.setItem(current_row_count, 0, QTableWidgetItem(formula))  # Добавляем формулу
            self.tableWidget.setItem(current_row_count, 1, QTableWidgetItem(str(result)))  # Добавляем результат
        else:
            # Показываем сообщение об ошибке, если формула некорректна
            QMessageBox.warning(self.centralwidget, "Ошибка", "Некорректная формула или монета не найдена.")

    def retranslateUi(self, BinanceTracker):
        _translate = QtCore.QCoreApplication.translate
        BinanceTracker.setWindowTitle(_translate("BinanceTracker", "BinanceTracker V1"))
        self.groupBox.setTitle(_translate("BinanceTracker", "Операции"))
        self.pushButton.setText(_translate("BinanceTracker", "Добавить операцию"))
        self.lineEdit.setPlaceholderText(_translate("BinanceTracker", "Добавьте отслеживаемую функцию, например: ETHBTC*BNBBTC"))
        self.pushButton_3.setText(_translate("BinanceTracker", "Удалить операцию"))
        self.groupBox_2.setTitle(_translate("BinanceTracker", "Настройки трекера"))
        self.lineEdit_2.setPlaceholderText(_translate("BinanceTracker", "Минимальное значение:"))
        self.lineEdit_3.setPlaceholderText(_translate("BinanceTracker", "Максимальное значение:"))
        self.pushButton_2.setText(_translate("BinanceTracker", "Сохранить значения"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("BinanceTracker", "Отслеживаемые монеты"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("BinanceTracker", "Полный список монет"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    BinanceTracker = QtWidgets.QMainWindow()
    ui = Ui_BinanceTracker()
    ui.setupUi(BinanceTracker)
    BinanceTracker.show()
    sys.exit(app.exec())

数据加载器.py:

import json
from PyQt6.QtWidgets import QTableWidgetItem


def load_data_to_table(table_widget, json_file_path, num_pairs_per_row):
    with open(json_file_path, 'r') as file:
        data = json.load(file)


    num_columns = num_pairs_per_row * 2
    table_widget.setColumnCount(num_columns)

    # Set horizontal header labels
    headers = []
    for i in range(num_pairs_per_row):
        headers.append(f"Монета {i + 1}")
        headers.append(f"Цена {i + 1}")
    table_widget.setHorizontalHeaderLabels(headers)

    num_rows = -(-len(data) // num_pairs_per_row)

    table_widget.setRowCount(num_rows)

    for index, item in enumerate(data):
        row_index = index // num_pairs_per_row
        col_index = (index % num_pairs_per_row) * 2
        table_widget.setItem(row_index, col_index, QTableWidgetItem(item['symbol']))  # Symbol
        table_widget.setItem(row_index, col_index + 1, QTableWidgetItem(item['price']))  # Price

包含测试数据的文件: https://drive.google.com/file/d/15Jb82HgrRUalP-YyVQpx_x2TRO_fsbZA/view?usp =sharing

python
  • 1 1 个回答
  • 44 Views

1 个回答

  • Voted
  1. Best Answer
    S. Nick
    2025-04-07T01:40:06Z2025-04-07T01:40:06Z

    处理函数时的主要错误:ETHBTC * BNBBTC,发生在以下行

            # !!! ТУТ ОШИБКА  vvvvvvvvvvvvvvvv 
            sub_result = eval('*'.join(factors))
    

    因为factors包含没有值的变量的名称。

    在此处输入图片描述


    你没有写出处理输入函数的逻辑和顺序是什么。
    我尝试为您做一些事情来处理您输入的一些功能,但您仍有一些工作要做。

    我对您的代码做了一些添加和更改并对其进行了注释。

    永远不要更改 Qt Designer 生成的代码。
    创建从相应小部件继承的另一个类,并使用创建的类来填充它。

    main.py:

    import json
    '''
    from PyQt6 import QtCore, QtGui, QtWidgets
    from PyQt6.QtWidgets import QTableWidgetItem, QMessageBox
    '''
    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5.QtWidgets import QTableWidgetItem, QMessageBox
    
    #from data_loader import load_data_to_table    # Import the data loader
    def load_data_to_table(table_widget, json_file_path, num_pairs_per_row):
        with open(json_file_path, 'r') as file:
            data = json.load(file)
    
        num_columns = num_pairs_per_row * 2
        table_widget.setColumnCount(num_columns)
    
        # Set horizontal header labels
        headers = []
        for i in range(num_pairs_per_row):
            headers.append(f"Монета {i + 1}")
            headers.append(f"Цена {i + 1}")
        table_widget.setHorizontalHeaderLabels(headers)
    
        num_rows = -(-len(data) // num_pairs_per_row)
        print(f'num_rows: {num_rows}; num_columns: {num_columns};\n')
        table_widget.setRowCount(num_rows)
    
        for index, item in enumerate(data):
            row_index = index // num_pairs_per_row
            col_index = (index % num_pairs_per_row) * 2
            table_widget.setItem(row_index, col_index, 
                QTableWidgetItem(item['symbol']))                # Symbol
            table_widget.setItem(row_index, col_index + 1, 
                QTableWidgetItem(item['price']))                 # Price
            
    
    class Ui_BinanceTracker(object):
        def setupUi(self, BinanceTracker):
            BinanceTracker.setObjectName("BinanceTracker")
            BinanceTracker.resize(840, 480)
            BinanceTracker.setStyleSheet("QPushButton {\n"
                                          "    height: 50px; \n"
                                          "    width: 120px;\n"
                                          "    font: 9pt \"Segoe UI\";\n"
                                          "}\n"
                                          "QLineEdit {\n"
                                          "    height: 50px; \n"
                                          "    width: 120px; \n"
                                          "    font: 14pt \"Segoe UI\";\n"
                                          "}\n"
                                          
                                          "#tableWidget {\n"
                                          "    font: 14pt \"Segoe UI\";\n"
                                          "}\n"
                                          "")
            self.centralwidget = QtWidgets.QWidget(parent=BinanceTracker)
            self.centralwidget.setObjectName("centralwidget")
            self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
            self.gridLayout.setObjectName("gridLayout")
            self.tabWidget = QtWidgets.QTabWidget(parent=self.centralwidget)
            self.tabWidget.setObjectName("tabWidget")
            self.tab = QtWidgets.QWidget()
            self.tab.setObjectName("tab")
            self.gridLayout_2 = QtWidgets.QGridLayout(self.tab)
            self.gridLayout_2.setObjectName("gridLayout_2")
            self.tableWidget = QtWidgets.QTableWidget(parent=self.tab)
            self.tableWidget.setObjectName("tableWidget")
            self.tableWidget.setColumnCount(2)
            self.tableWidget.setHorizontalHeaderLabels(
                ["Формула", "Результат"])
            self.tableWidget.setRowCount(0)
            self.gridLayout_2.addWidget(self.tableWidget, 0, 0, 1, 2)
            self.groupBox = QtWidgets.QGroupBox(parent=self.tab)
            self.groupBox.setObjectName("groupBox")
            self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox)
            self.gridLayout_4.setObjectName("gridLayout_4")
            self.lineEdit = QtWidgets.QLineEdit(parent=self.groupBox)
            self.lineEdit.setObjectName("lineEdit")
            self.gridLayout_4.addWidget(self.lineEdit, 0, 0, 1, 1)
            self.pushButton = QtWidgets.QPushButton(parent=self.groupBox)
            self.pushButton.setObjectName("pushButton")
            self.gridLayout_4.addWidget(self.pushButton, 0, 1, 1, 1)
            self.pushButton_3 = QtWidgets.QPushButton(parent=self.groupBox)
            self.pushButton_3.setObjectName("pushButton_3")
            self.gridLayout_4.addWidget(self.pushButton_3, 0, 2, 1, 1)
            self.gridLayout_2.addWidget(self.groupBox, 1, 0, 1, 2)
            self.groupBox_2 = QtWidgets.QGroupBox(parent=self.tab)
            self.groupBox_2.setObjectName("groupBox_2")
            self.gridLayout_5 = QtWidgets.QGridLayout(self.groupBox_2)
            self.gridLayout_5.setObjectName("gridLayout_5")
            self.lineEdit_2 = QtWidgets.QLineEdit(parent=self.groupBox_2)
            self.lineEdit_2.setObjectName("lineEdit_2")
            self.gridLayout_5.addWidget(self.lineEdit_2, 0, 0, 1, 1)
            self.lineEdit_3 = QtWidgets.QLineEdit(parent=self.groupBox_2)
            self.lineEdit_3.setObjectName("lineEdit_3")
            self.gridLayout_5.addWidget(self.lineEdit_3, 0, 1, 1, 1)
            self.pushButton_2 = QtWidgets.QPushButton(parent=self.groupBox_2)
            self.pushButton_2.setObjectName("pushButton_2")
            self.gridLayout_5.addWidget(self.pushButton_2, 0, 2, 1, 1)
            self.gridLayout_2.addWidget(self.groupBox_2, 2, 0, 1, 2)
            self.tabWidget.addTab(self.tab, "")
            self.tab_2 = QtWidgets.QWidget()
            self.tab_2.setObjectName("tab_2")
            self.gridLayout_3 = QtWidgets.QGridLayout(self.tab_2)
            self.gridLayout_3.setObjectName("gridLayout_3")
            self.tableWidget_2 = QtWidgets.QTableWidget(parent=self.tab_2)
            self.tableWidget_2.setObjectName("tableWidget_2")
            self.tableWidget_2.setColumnCount(2)
            self.tableWidget_2.setHorizontalHeaderLabels(["Пара", "Цена"])
            self.tableWidget_2.setRowCount(0)
            self.gridLayout_3.addWidget(self.tableWidget_2, 0, 0, 1, 1)
            self.tabWidget.addTab(self.tab_2, "")
            self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
            BinanceTracker.setCentralWidget(self.centralwidget)
            self.menubar = QtWidgets.QMenuBar(parent=BinanceTracker)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 640, 22))
            self.menubar.setObjectName("menubar")
            BinanceTracker.setMenuBar(self.menubar)
            self.statusbar = QtWidgets.QStatusBar(parent=BinanceTracker)
            self.statusbar.setObjectName("statusbar")
            BinanceTracker.setStatusBar(self.statusbar)
    
            self.retranslateUi(BinanceTracker)
            self.tabWidget.setCurrentIndex(0)
            QtCore.QMetaObject.connectSlotsByName(BinanceTracker)
    
        def retranslateUi(self, BinanceTracker):
            _translate = QtCore.QCoreApplication.translate
            BinanceTracker.setWindowTitle(_translate("BinanceTracker", "BinanceTracker V1"))
            self.groupBox.setTitle(_translate("BinanceTracker", "Операции"))
            self.pushButton.setText(_translate("BinanceTracker", "Добавить операцию"))
            self.lineEdit.setPlaceholderText(_translate(
                "BinanceTracker", 
                "Добавьте функцию, например: ETHBTC*BNBBTC"))
            self.pushButton_3.setText(_translate("BinanceTracker", "Удалить операцию"))
            self.groupBox_2.setTitle(_translate("BinanceTracker", "Настройки трекера"))
            self.lineEdit_2.setPlaceholderText(_translate("BinanceTracker", "Минимальное значение:"))
            self.lineEdit_3.setPlaceholderText(_translate("BinanceTracker", "Максимальное значение:"))
            self.pushButton_2.setText(_translate("BinanceTracker", "Сохранить значения"))
            self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("BinanceTracker", "Отслеживаемые монеты"))
            self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("BinanceTracker", "Полный список монет"))
    
    
    class MainWindow(QtWidgets.QMainWindow, Ui_BinanceTracker):
        def __init__(self):
            super().__init__()
            self.setupUi(self)
            
            self.tableWidget.horizontalHeader().setSectionResizeMode(  # +
                QtWidgets.QHeaderView.Stretch)
            self.tableWidget.setAlternatingRowColors(True)             # + 
                    
    
            # Load data into tableWidget_2
            # Change this to the desired number of pairs per row
            num_pairs_per_row = 6  
            load_data_to_table(
                self.tableWidget_2, 
                'price.json', 
                num_pairs_per_row
            )
    
            # Connect the pushButton to function formula
            self.pushButton.clicked.connect(self.calculate_formula)
    
        def calculate_formula(self):
            # Получаем формулу из lineEdit
            formula = self.lineEdit.text().strip()
            
    # +++ vvv
            if not formula:
                QMessageBox.warning(
                    self, 
                    "Ошибка", 
                    "Напишите функцию в lineEdit.")
                return
    # +++ ^^^
            # Разделяем формулу на части 
            # (например, ETHBTC*BNBBTC -> ['ETHBTC', 'BNBBTC'])
            # Сначала разбиваем по '+'
            parts = formula.replace(' ', '').split('+')  
            print(f'111 formula: {formula}; parts: {parts};\n') #
            
            # Инициализируем результат
            result = 0.0
            valid_formula = True
    
            # Вычисляем результат
            for part in parts:
                sub_parts = part.split('-')            # Разбиваем по '-' ???
                sub_result = 0.0
                print(f'\n222 part={part}; sub_parts={sub_parts};')
                for sub_part in sub_parts:
                    print(f"\t333 1 sub_part={sub_part};") #
    # Если есть умножение или деление
                    if '*' in sub_part or '/' in sub_part:  
                        print(f"\t333 2 sub_part={sub_part}; --> if '*' in sub_part or '/' in sub_part: ") #
                        factors = []
    
                        # Разбиваем по '*' и '/'
    # ???                                                v    vv
    #                    for factor in sub_part.replace('-', ' -').\
    #                        replace('+', ' +').split():
    # ???                             ^    ^^
    # +++ vvv                                               v?v
                        for factor in sub_part.replace('*', ' ').\
                            replace('/', ' ').split():
    # +++ ^^^                            ^?^
                            print(f'\t444 factor={factor}\n') # 
                            if factor:    # Проверяем, что не пустая строка
                                factors.append(factor)
                        print(f'\t555 factors={factors} \n') #  
                        # Вычисляем результат для текущей подчасти
                        try:
    # Используем eval для вычисления  ETHBTC*LTCBTC
    # !!! +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
                            _factors = self.looking_for_price(
                                factors, sub_result, result)
                            print(f"\n666 1 _factors={_factors}\n") #
                            print(f"666 2 _factors={'*'.join([str(_factors[0]), str(_factors[1])])}\n") # 
       
                            sub_result = eval(
                                '*'.join(
                                    [str(_factors[0]), 
                                     str(_factors[1])]
                                 ))
    # !!! +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
                            print(f"777 eval={'*'.join(factors)}\n") # 
    # !!! ТУТ ОШИБКА                          vvvvvvvvvvvvvvvv                        
    #                       sub_result = eval('*'.join(factors))
    # !!! этот принт не выводится, если  eval('*'.join(factors))                     
                            print(f"888 sub_result={sub_result}\n") # 
                            
                        except Exception as e:
                            valid_formula = False
                            print(f"999 sub_result={sub_result}\n") #
                            break
                    else:
    # Если это просто монета, ищем ее цену
                        found = False
                        
                        for row in range(self.tableWidget_2.rowCount()):
                            for col in range(0, self.tableWidget_2.columnCount(), 2):
    
    # !!! +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
                                item = self.tableWidget_2.item(row, col)
                                
                                if item and item.text() == sub_part:
                                    price_item = self.tableWidget_2.item(
                                        row, col + 1)
                                    print(f'\t{price_item.text()};') #
                                    if price_item:
                                        sub_result += float(price_item.text())
                                        found = True
                                    break
    # +++
                                print(f'{found}\n') # 
                            if found:
                                break
    
                        if not found:
                            valid_formula = False
                            break
    # !!! +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    
                result += sub_result
    
            # Если формула корректна, добавляем результат
            if valid_formula:
                current_row_count = self.tableWidget.rowCount()
                self.tableWidget.setRowCount(current_row_count + 1)  
    
                # Заполняем строку формулой и результатом
                self.tableWidget.setItem(current_row_count, 0, 
                    QTableWidgetItem(formula))  
                self.tableWidget.setItem(current_row_count, 1, 
    #-                QTableWidgetItem(str(result)))
    # !!! +++  
                    QTableWidgetItem(f'{result:>12.8f}'))            # +++                 
    
            else:
                # Показываем сообщение об ошибке
                QMessageBox.warning(self.centralwidget, 
                    "Ошибка", 
                    "Некорректная формула или монета не найдена.")
    
    # !!! +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    # Если это просто монета, ищем ее цену
        def looking_for_price(self, factors, sub_result, result):
            _factors = []
            
            for factor in factors:
                print(f'factor={factor}') # 
            
                for row in range(self.tableWidget_2.rowCount()):
                    for col in range(0, self.tableWidget_2.columnCount(), 2):
                        item = self.tableWidget_2.item(row, col)
                        if item and item.text() == factor:
                            price_item = self.tableWidget_2.item(row, col + 1)
                            print(f'\t{price_item.text()};') #
                            if price_item:
                                sub_result += float(price_item.text())
                                _factors.append(float(price_item.text()))
                                found = True
                            break
    
    # +++
                        print(f'{found}\n') # 
                    if found:
                        break
    
            if not found:
                valid_formula = False
    #            break
    
            result *= sub_result        
            print(f'{result} += {sub_result}==={_factors}===') # 
            return _factors
    # !!! +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        
            
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        '''
        BinanceTracker = QtWidgets.QMainWindow()
        ui = Ui_BinanceTracker()
        ui.setupUi(BinanceTracker)
        BinanceTracker.show()
        '''
        w = MainWindow()
        w.show()
        sys.exit(app.exec())
    

    price.json:

    [
      {"symbol":"ETHBTC","price":"0.02158000"},
      {"symbol":"LTCBTC","price":"0.00099700"},
      {"symbol":"BNBBTC","price":"0.00717100"},
      {"symbol":"NEOBTC","price":"0.00005690"},
      {"symbol":"QTUMETH","price":"0.00105100"},
      {"symbol":"EOSETH","price":"0.00043200"},
      {"symbol":"SNTETH","price":"0.00001210"},
      {"symbol":"BNTETH","price":"0.00020260"},
      {"symbol":"BCCBTC","price":"0.00000000"},
      {"symbol":"GASBTC","price":"0.00002460"},
      {"symbol":"BNBETH","price":"0.33230000"},
      {"symbol":"BTCUSDT","price":"82388.00000000"},
      {"symbol":"ETHUSDT","price":"1778.46000000"},
      {"symbol":"HSRBTC","price":"0.00000000"},
      {"symbol":"OAXETH","price":"0.00000000"},
      {"symbol":"DNTETH","price":"0.00000000"},
      {"symbol":"MCOETH","price":"0.00000000"},
      {"symbol":"ICNETH","price":"0.00000000"},
      {"symbol":"MCOBTC","price":"0.00000000"},
      {"symbol":"WTCBTC","price":"0.00000024"},
      {"symbol":"WTCETH","price":"0.00000000"},
      {"symbol":"LRCBTC","price":"0.00000114"},
      {"symbol":"LRCETH","price":"0.00005281"},
      {"symbol":"QTUMBTC","price":"0.00002255"}
    ]
    

    在此处输入图片描述

    在此处输入图片描述

    在此处输入图片描述

    在此处输入图片描述

    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5