TypeError: может только конкатенировать str (не "int") в str
Я написал программу с интерфейсом, которая будет выводить случайное число, но при запуске выводится ошибка которую я не могу решить.
Делал интерфейс через Qt Designer.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from randomgui import *
import random
class MyWin(QtWidgets.QMainWindow):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.b_randomed.clicked.connect(self.random_value())
def random_value(self):
v_min = self.ui.t_min.toPlainText() # Get min value
v_max = self.ui.t_max.toPlainText() # Get max value
randomintresult = random.randint(v_min, v_max) # random int
self.ui.label.setText(randomintresult) # Text output
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
myapp = MyWin()
myapp.show()
sys.exit(app.exec_())
randomgui.py
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(160, 130)
MainWindow.setMinimumSize(QtCore.QSize(160, 130))
MainWindow.setMaximumSize(QtCore.QSize(160, 130))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.b_randomed = QtWidgets.QPushButton(self.centralwidget)
self.b_randomed.setGeometry(QtCore.QRect(0, 92, 161, 41))
self.b_randomed.setObjectName("b_randomed")
self.t_min = QtWidgets.QTextEdit(self.centralwidget)
self.t_min.setGeometry(QtCore.QRect(0, 64, 81, 31))
self.t_min.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.t_min.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.t_min.setObjectName("t_min")
self.t_max = QtWidgets.QTextEdit(self.centralwidget)
self.t_max.setGeometry(QtCore.QRect(80, 64, 80, 31))
self.t_max.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.t_max.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.t_max.setObjectName("t_max")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(-9, -4, 171, 71))
font = QtGui.QFont()
font.setFamily("Microsoft YaHei UI")
font.setPointSize(20)
self.label.setFont(font)
self.label.setStyleSheet("background-color: rgb(122, 122, 122);")
self.label.setIndent(10)
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.b_randomed.setText(_translate("MainWindow", "Randomed"))
self.t_min.setPlaceholderText(_translate("MainWindow", "Min"))
self.t_max.setPlaceholderText(_translate("MainWindow", "Max"))
self.label.setText(_translate("MainWindow", "0"))
error:
TypeError: can only concatenate str (not "int") to str
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Я отметил для вас ошибки. которые вам надо исправить. Если что-то не понятно - спросите.
import sys
import random
from PyQt5 import QtCore, QtGui, QtWidgets
#from randomgui import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(160, 130)
MainWindow.setMinimumSize(QtCore.QSize(160, 130))
MainWindow.setMaximumSize(QtCore.QSize(160, 130))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.b_randomed = QtWidgets.QPushButton(self.centralwidget)
self.b_randomed.setGeometry(QtCore.QRect(0, 92, 161, 41))
self.b_randomed.setObjectName("b_randomed")
self.t_min = QtWidgets.QTextEdit(self.centralwidget)
self.t_min.setGeometry(QtCore.QRect(0, 64, 81, 31))
self.t_min.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.t_min.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.t_min.setObjectName("t_min")
self.t_max = QtWidgets.QTextEdit(self.centralwidget)
self.t_max.setGeometry(QtCore.QRect(80, 64, 80, 31))
self.t_max.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.t_max.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.t_max.setObjectName("t_max")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(-9, -4, 171, 71))
font = QtGui.QFont()
font.setFamily("Microsoft YaHei UI")
font.setPointSize(20)
self.label.setFont(font)
self.label.setStyleSheet("background-color: rgb(122, 122, 122);")
self.label.setIndent(10)
self.label.setObjectName("label")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.b_randomed.setText(_translate("MainWindow", "Randomed"))
self.t_min.setPlaceholderText(_translate("MainWindow", "Min"))
self.t_max.setPlaceholderText(_translate("MainWindow", "Max"))
self.label.setText(_translate("MainWindow", "0"))
class MyWin(QtWidgets.QMainWindow):
def __init__(self, parent=None):
# QtWidgets.QWidget.__init__(self, parent)
super(MyWin, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# ---------------------------------------------------------> vv <---- ???
# self.ui.b_randomed.clicked.connect(self.random_value())
self.ui.b_randomed.clicked.connect(self.random_value)
def random_value(self):
v_min = self.ui.t_min.toPlainText() # Get min value
v_max = self.ui.t_max.toPlainText() # Get max value
# randomintresult = random.randint(v_min, v_max) # random int
# -------------------------------------> vvvv v vvvv v <---- +++
randomintresult = random.randint(int(v_min), int(v_max))
# self.ui.label.setText(randomintresult) # Text output
# ------------------> vvvvvv <----------------------------------- +++
self.ui.label.setNum(randomintresult)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
myapp = MyWin()
myapp.show()
sys.exit(app.exec_())
Автор решения: ganz
→ Ссылка
result='string'+123
#TypeError: can only concatenate str (not "int") to str
result='string'+'123' #ok
result='string'+str(123) #ok
то есть нужно каким либо образом изменить тип числа на строковой. Эта ошибка происходит где-то при чтении-изменении данных в интерфейсе, точнее у вас куча ошибок по несовместимости типов
class MyWin(QtWidgets.QMainWindow):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.b_randomed.clicked.connect(self.random_value) #тут задавался результат выполнения функции, а не функция
def random_value(self):
v_min = self.ui.t_min.toPlainText() # Get min value
v_max = self.ui.t_max.toPlainText() # Get max value
if v_min=='':
#устанавливаем значения по умолчанию тк невозможно преобразовать пустую строку в число
v_min, v_max = 0, 10
randomintresult = random.randint(int(v_min), int(v_max)) # v_min была строкой требовалось число
self.ui.label.setText(str(randomintresult) # требуется строка а не число
исправленая версия с примечаниями
