@mapi
Увлекаюсь программированием на питоне.

Почему при передаче аргумента в функцию для присвоения действия кнопке передаётся максимальное число?

Хочу написать программу для подсчёта стоимости досок на основе их размеров. При введении всех данных пользователь нажимает на кнопку "добавить", после чего данные о размере доски, количестве и объёма появляются в правой части экрана(в label с оранжевыми краями и строками внутри) по порядку. По задумке кнопки справа от этого label`a должны прибавлять или вычитать 1 из количества. Но по какой то причине при выполнении функции self.min_-but передаётся максимальное число из цикла где создаются кнопки "+" и "-".

Пробовал убирать функцию lamda и вводить отдельную переменную, прибавляя к ней 1 в начале цикла, также пытался найти решение в интернете(вводя название ошибки, библиотеку, ошибки при составлении выражений с lambda).

При выполнении выдаёт ошибку:
self.q[countik] = int(self.q.get(countik)) - 1
^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType'

Предполагаю, что проблема в самом цикле создания кнопок "+" и "-"

from PyQt5 import QtCore, QtGui, QtWidgets
import sys

count = 1

#функция с определённым стилем текста(нужен ля текста слева от полей ввода)
def setText(label, text):
      label.setText(f"<html><head/><body><p align=\"center\"><span style=\" font-size:28pt; font-weight:600; color:#ff5500;\">{text}</span></p></body></html>")
    
#Создание интерфейса
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.resize(1920, 1080)
        self.centralwidget = QtWidgets.QWidget(MainWindow)

        self.bg = QtWidgets.QLabel(self.centralwidget)
        self.bg.setGeometry(QtCore.QRect(0, 0, 1920, 1080))
        self.bg.setStyleSheet("background-color: rgba(0, 0, 0, 190)")
        self.bg.setText("")
        self.bg_image = QtGui.QPixmap("C:\programming\drev\phone.jpg")
        self.bg.setPixmap(self.bg_image)

        self.top_label = QtWidgets.QLabel(self.centralwidget)
        self.top_label.setGeometry(QtCore.QRect(330, 230, 820, 110))

        self.label_width = QtWidgets.QLabel(self.centralwidget)
        self.label_width.setGeometry(QtCore.QRect(390, 380, 200, 80))

        self.label_height = QtWidgets.QLabel(self.centralwidget)
        self.label_height.setGeometry(QtCore.QRect(390, 480, 200, 80))

        self.label_length = QtWidgets.QLabel(self.centralwidget)
        self.label_length.setGeometry(QtCore.QRect(390, 580, 200, 80))

        self.label_quantity = QtWidgets.QLabel(self.centralwidget)
        self.label_quantity.setGeometry(QtCore.QRect(390, 680, 200, 80))

        self.label_rade = QtWidgets.QLabel(self.centralwidget)
        self.label_rade.setGeometry(QtCore.QRect(390, 780, 200, 80))

        self.pushButton_add = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_add.setGeometry(QtCore.QRect(390, 880, 200, 50))
        self.pushButton_add.setStyleSheet("border-radius : 20px;\n"
"color: rgb(105, 0, 0);\n"
"font: 75 15pt \"MS Shell Dlg 2\";\n"
"background-color: rgb(255, 85, 0);")
        
        self.label_list = QtWidgets.QLabel(self.centralwidget)
        self.label_list.setGeometry(QtCore.QRect(1140, 260, 390, 590))
        self.label_list.setStyleSheet("background-color: rgba(0, 0, 0, 100);\n"
"border-radius: 30px;\n"
"border: 5px solid red;")
        
        self.pushButton_copy = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_copy.setGeometry(QtCore.QRect(1340, 880, 180, 50))
        self.pushButton_copy.setStyleSheet("border-radius : 20px;\n"
"color: rgb(105, 0, 0);\n"
"font: 75 15pt \"MS Shell Dlg 2\";\n"
"background-color: rgb(255, 85, 0);")

        



        self.editlines = {}
        self.underlines = {}

        for i in range(1 , 6):
           self.editlines[i] = QtWidgets.QTextEdit(self.centralwidget)
           self.editlines[i].setGeometry(QtCore.QRect(620, 303 + 100 * i, 220, 40))
           self.editlines[i].setStyleSheet("background-color: rgba(255, 0, 0, 115);\n"
"border-radius: 5px;\n"
"font: 550 15pt \" MS Shell Dlg 2\";\n"
"color: rgb(255, 255, 255);")
           
           self.underlines[i] = QtWidgets.QLabel(self.centralwidget)
           self.underlines[i].setGeometry(QtCore.QRect(620, 343 + 100 * i, 220, 8))
           self.underlines[i].setStyleSheet("background-color: rgb(255, 0, 0);\n"
"border-radius: 2px;")
           self.underlines[i].setText("")
#объявление словарей
        self.h = {}
        self.w = {}
        self.l = {}
        self.q = {}
        self.total_txt = {}
        self.total_int = {}
        self.btns = {}
        self.btns2 = {}
        self.lblls = {}
#предполагаемая проблема(цикл)
for i in range(1, 15):
            self.lblls[i] = QtWidgets.QLabel(self.centralwidget)
            self.lblls[i].setGeometry(QtCore.QRect(1160, 240 + 40 * i, 350, 20))
            self.lblls[i].setText("")
            self.lblls[i].setStyleSheet("background-color: rgba(0, 0, 0, 100);\n"
"border-radius: 5px;\n"
"border-width: 5px;\n"
"border-bottom-color: rgb(255, 0, 0);\n"
"")
            self.btns[i] = QtWidgets.QPushButton(self.centralwidget)
            self.btns[i].setGeometry(QtCore.QRect(1550, 235 + 40 * i, 30, 30))
            self.btns[i].setStyleSheet("background-color: rgb(255, 0, 0);\n"
"border-radius: 5px;"
"font: 75 15pt \"MS Shell Dlg 2\";\n"
"color: rgb(255, 255, 255);\n"
"text-align: center;\n"
"")
            self.btns[i].setText("-")
            self.btns[i].clicked.connect(lambda: self.min_but(i))

            self.btns2[i] = QtWidgets.QPushButton(self.centralwidget)
            self.btns2[i].setGeometry(QtCore.QRect(1600, 235 + 40 * i, 30, 30))
            self.btns2[i].setStyleSheet("background-color: rgb(255, 0, 0);\n"
"border-radius: 5px;"
"font: 75 15pt \"MS Shell Dlg 2\";\n"
"color: rgb(255, 255, 255);\n"
"text-align: center;\n"
"")
            self.btns2[i].setText("+")</spoiler>




        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        self.pushButton_add.clicked.connect(self.save)
#изменение текста
    def retranslateUi(self, MainWindow):
        global _translate
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle("Хлебный Мякиш")
        setText(self.label_width, 'Ширина')
        setText(self.label_height, 'Высота')
        setText(self.label_length, 'Длина')
        setText(self.label_quantity, 'Кол-во')
        setText(self.label_rade, 'Сорт')
        self.top_label.setText("<html><head/><body><p align=\"center\"><span style=\" font-size:48pt; font-weight:600; color:#ff5500;\">Компания</span></p></body></html>")
        self.pushButton_add.setText("Добавить")
        self.pushButton_copy.setText("Скопировать")
#функция для кнопок "-"
    def min_but(self, countik):
        print(countik)
        print(self.q)
        print(self.q.get(countik))
        self.q[countik] = int(self.q.get(countik)) - 1
        self.textEdit_quantity.setText(str(self.q[countik]))
        self.lblls[countik].setText(f"<html><head/><body><p align=\"left\"><span style=\" font-size:12pt; font-weight:600; color:#ff5500;\">{self.total_txt[countik] + ' x' + str(self.q[countik]) + ' = ' + str(self.total_int[countik])}</span></p></body></html>")

#функция для кнопки "добавить"
    def save(self):
      try:
         global count  
         self.w[count] = self.editlines[1].toPlainText()
         self.h[count] = self.editlines[2].toPlainText()
         self.l[count] = self.editlines[3].toPlainText()
         self.q[count] = self.editlines[4].toPlainText()
         self.total_txt[count] = self.h[count] + 'x' + self.w[count] + 'x' + self.l[count]
         self.total_int[count] = ((int(self.w[count]) / 1000) * (int(self.h[count]) / 1000) * int(self.l[count])) * int(self.q[count])
         self.lblls[count].setText(f"<html><head/><body><p align=\"left\"><span style=\" font-size:12pt; font-weight:600; color:#ff5500;\">{self.total_txt[count] + ' x' + self.q[count] + ' = ' + str(round(self.total_int[count], 8))}</span></p></body></html>")
         count += 1
         print(self.q)
      except:
          print('Error!')

#запуск приложения
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    MainWindow.showFullScreen()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
  • Вопрос задан
  • 21 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы