Что значит ошибка unsupported operand type(s) for +: 'QLineEdit' and 'int';?
Начал делать рандомайзер (для общего развитие). Все хорошо, код написал, проверяю и выдает такую ошибку:
TypeError: unsupported operand type(s) for +: 'QLineEdit' and 'int';
Вот мой код:
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import*
import random
app = QApplication([])
win = QWidget()
win.resize(400, 550)
win.setWindowTitle('Randomizer')
txt = QLabel('<b> Randomizer </b>')
first_num = QLineEdit('')
second_num = QLineEdit('')
first_lbl = QLabel('Initial number: ')
second_lbl = QLabel('Final number: ')
ans = QLabel('')
bt1 = QPushButton('Get Number')
line = QVBoxLayout()
line.addWidget(txt)
txt.setAlignment(Qt.AlignCenter)
line.addStretch(1)
line.addWidget(first_lbl)
first_lbl.setAlignment(Qt.AlignLeft | Qt.AlignTop)
line.addStretch(1)
line.addWidget(first_num)
first_num.setAlignment(Qt.AlignLeft | Qt.AlignTop)
line.addStretch(1)
line.addWidget(second_lbl)
first_lbl.setAlignment(Qt.AlignLeft | Qt.AlignTop)
line.addStretch(1)
line.addWidget(second_num)
first_num.setAlignment(Qt.AlignLeft | Qt.AlignTop)
line.addStretch(1)
line.addWidget(ans)
ans.setAlignment(Qt.AlignCenter)
line.addStretch(1)
line.addWidget(bt1, Qt.AlignCenter)
line.addStretch(2)
def click():
rand = str(random.randint(first_num, second_num))
ans.setText(rand)
bt1.clicked.connect(click)
win.setLayout(line)
win.show()
app.exec_()
Если можете, то помогите решить проблему.
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
random.randint(a, b)
Возвращает случайное целое число N такое, что a <= N <= b.
first_num и first_num - это объекты QLineEdit.
Чтобы получить из этих объектов содержимое, т.е. строку надо выполнить
first_num = self.first_num.text()
second_num = self.second_num.text()
которую (строку) надо преобразовать в целое число (int())
rand = str(random.randint(
int(self.first_num.text()),
int(self.second_num.text())
))
import random
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
class MainWindow(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.txt = QLabel('<b> Randomizer </b>')
self.txt.setAlignment(Qt.AlignCenter)
self.first_num = QLineEdit()
self.second_num = QLineEdit()
self.first_lbl = QLabel('Initial number: ')
self.second_lbl = QLabel('Final number: ')
self.ans = QLabel()
self.ans.setAlignment(Qt.AlignCenter)
self.ans.setStyleSheet('color: #f55; font-size: 32px;')
self.bt1 = QPushButton('Get Number')
self.bt1.clicked.connect(self._click)
layout = QVBoxLayout(self)
layout.addWidget(self.txt)
layout.addWidget(self.first_lbl)
layout.addWidget(self.first_num)
layout.addWidget(self.second_lbl)
layout.addWidget(self.second_num)
layout.addStretch(1)
layout.addWidget(self.ans)
layout.addStretch(1)
layout.addWidget(self.bt1, Qt.AlignCenter)
def _click(self):
first_num = self.first_num.text()
second_num = self.second_num.text()
if not first_num or not second_num:
msg = QtWidgets.QMessageBox.information(self, 'Внимание', 'Заполните поля ввода.')
return
if first_num > second_num:
msg = QtWidgets.QMessageBox.information(self, 'Внимание', 'first_num > second_num.')
return
# rand = str(random.randint(first_num, second_num))
rand = str(random.randint(int(self.first_num.text()), int(self.second_num.text())))
self.ans.setText(rand)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.resize(400, 350)
w.setWindowTitle('Randomizer')
w.show()
sys.exit(app.exec_())
