Категория: Разработка Теги: Python Опубликовано: 30 ноября 2020

Deprecation Warning: an integer is required (got type float)

При разработке программы в python 3 встретилась ошибка:

D:\LicenseChecker\1.6\main.pyw:45: DeprecationWarning: an integer is required (got type float).  
Implicit conversion to integers using __int__ is deprecated, and may be removed in a future version of Python.
  self.tableWidget.setGeometry(90 * koefW, 0 * koefH, 831 * koefW, 291 * koefH)

Она связана появляется в python версии 3.8.5. Ниже расскажу как я устранил эту ошибку и приведу строчку кода, которая это вызывала.

class UI(QMainWindow):
    def __init__(self):
        super(UI, self).__init__()
        uic.loadUi("data\\main.ui", self)
        self.setupUi(self)
        self.w = self.size().width()     # "определение ширины"
        self.h = self.size().height()   # "определение высоты"
    def resizeEvent(self, event):
        width =  self.size().width()
        height = self.size().height()

        koefW = width / self.w
        koefH = height / self.h

        self.tableWidget.setGeometry(90 * koefW, 0 * koefH, 831 * koefW, 291 * koefH)
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(921, 336)
        self.tableWidget.setGeometry(QRect(90, 0, 831, 291))

        self.retranslateUi(Form)
        QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QCoreApplication.translate

win = UI()

Иными словами, Python говорит нам: 

Предупреждение об устаревании: требуется целое число (получен тип float). Неявное преобразование в целые числа с использованием __int__ устарело и может быть удалено в будущей версии Python.

Прочитав советы на других сайтах, я принялся заменять self.tableWidget.setGeometry(90 * koefW, 0 * koefH, 831 * koefW, 291 * koefH) на self.tableWidget.setGeometry(int(90 * koefW), int(0 * koefH), int(831 * koefW), int(291 * koefH)), однако, в этом случае ломалась функция изменения размера окна. Попытка преобразовать в int в присвоении значений переменных width, height, koefW и koefH также не увенчалась успехом.

Тогда, немного подумав, я решил преобразовать в Integer все значения в отдельных переменных, а в setGeometry уже просто передать эти переменные, и это сработало! Вот код измененной функции:

def resizeEvent(self, event):
        width =  self.size().width()
        height = self.size().height()

        koefW = width / self.w
        koefH = height / self.h

        s1 = int(90 * koefW)
        s2 = int(0 * koefH)
        s3 = int(831 * koefW)
        s4 = int(291 * koefH)
        self.tableWidget.setGeometry(s1, s2, s3, s4)
Алексей Черемных
1848