В чём проблема в моём коде?
Я сделал программу (погода, использовал библиотеку pyowm) на Python и PySide2, сделал интерфейс в Qt Designer, конвертировал его в .py, написал логику, но когда запускаю, вбиваю название города и нажимаю на кнопку, прога вылетает и даёт вот такую ошибку:
Traceback (most recent call last):
File "main.py", line 18, in weather_city
observation = owm.weather_at_place(city)
AttributeError: 'OWM' object has no attribute 'weather_at_place'
Вот логика:
import sys, pyowm
from PyQt5 import QtCore, QtGui, QtWidgets
from ui import Ui_MainWindow
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
def weather_city():
owm = pyowm.OWM('a7414723bd773b6f41f5799a084baafa')
city = ui.lineEdit.text()
observation = owm.weather_at_place(city)
w = observation.get_weather()
temperature = w.get_temperature('celius')['temp']
ui.label.setText(f'Температура: {temperature}')
ui.pushButton.clicked.connect(weather_city)
sys.exit(app.exec_())
Вот интерфейс (если он чем то поможет):
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(434, 346)
MainWindow.setStyleSheet("background-color: qlineargradient(spread:pad, x1:0.358, y1:0.398,
x2:1, y2:1, stop:0 rgba(133, 167, 0, 255), stop:0.596591 rgba(243, 158, 117, 255))")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(100, 240, 241, 51))
font = QtGui.QFont()
font.setPointSize(11)
font.setBold(True)
font.setWeight(75)
self.pushButton.setFont(font)
self.pushButton.setStyleSheet("QPushButton {\n"
" color: black;\n"
" background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(90, 167,
187, 255), stop:0.323864 rgba(135, 230, 181, 255), stop:0.494318 rgba(95, 187, 209, 255),
stop:0.630682 rgba(152, 152, 232, 255), stop:0.789773 rgba(221, 196, 172, 255), stop:1 rgba(162, 255,
255, 255));\n"
" border-radius: 25;\n"
"}\n"
"\n"
"\n"
"QPushButton:hover{\n"
" background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(56, 196, 145,
255), stop:0.153409 rgba(93, 198, 104, 255), stop:0.335227 rgba(85, 228, 189, 255), stop:0.494318
rgba(65, 223, 136, 255), stop:0.676136 rgba(207, 184, 184, 255), stop:0.829545 rgba(180, 255, 145,
255), stop:1 rgba(140, 248, 70, 255));\n"
"}\n"
"\n"
"QPushButton:pressed{\n"
" background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0.0113636 rgba(0,
228, 86, 255), stop:0.142045 rgba(97, 205, 36, 255), stop:0.278409 rgba(16, 171, 72, 255),
stop:0.4375 rgba(112, 196, 112, 255), stop:0.579545 rgba(148, 241, 148, 255), stop:0.715909 rgba(162,
255, 108, 255), stop:0.846591 rgba(140, 255, 119, 255), stop:1 rgba(122, 251, 106, 255));\n"
"}")
self.pushButton.setObjectName("pushButton")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(40, 90, 361, 131))
font = QtGui.QFont()
font.setPointSize(14)
font.setBold(True)
font.setWeight(75)
self.label.setFont(font)
self.label.setStyleSheet("QLabel {\n"
"color: balck;\n"
"background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(56, 199, 129,
255), stop:0.147727 rgba(40, 102, 144, 255), stop:0.346591 rgba(2, 108, 88, 255), stop:0.585227
rgba(128, 226, 149, 255), stop:0.801136 rgba(119, 215, 174, 255), stop:1 rgba(115, 255, 108,
255));\n"
"border-radius: 23;\n"
"}")
self.label.setText("")
self.label.setObjectName("label")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(30, 20, 381, 51))
font = QtGui.QFont()
font.setPointSize(11)
font.setBold(True)
font.setWeight(75)
self.lineEdit.setFont(font)
self.lineEdit.setStyleSheet("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1,
y2:1, stop:0 rgba(255, 189, 214, 255), stop:0.323864 rgba(173, 210, 173, 255), stop:0.659091 rgba(61,
225, 143, 255), stop:1 rgba(212, 192, 255, 255));\n"
"border-radius: 24px;")
self.lineEdit.setObjectName("lineEdit")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 434, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "ПОЛУЧИТЬ"))
UPD: Я изменил свой код в соответствии с ответом в данном мне вопросе, и он выдал вот такую ошибку:
Traceback (most recent call last):
File "main.py", line 19, in weather_city
observation = mgr.weather_manager().weather_at_place(city)
AttributeError: 'WeatherManager' object has no attribute 'weather_manager'
Ещё UPD: Я изменил код на:
import sys, pyowm
from PyQt5 import QtCore, QtGui, QtWidgets
from ui import Ui_MainWindow
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
def weather_city():
owm = pyowm.OWM('a7414723bd773b6f41f5799a084baafa')
city = ui.lineEdit.text()
mrg = owm.weather_manager()
observation = city.weather_at_place(city)
w = observation.get_weather()
temperature = w.get_temperature('celius')['temp']
ui.label.setText(f'Температура: {temperature}')
ui.pushButton.clicked.connect(weather_city)
sys.exit(app.exec_())
И выдало такую ошибку:
Traceback (most recent call last):
File "main.py", line 20, in weather_city
observation = city.weather_at_place(city)
AttributeError: 'str' object has no attribute 'weather_at_place'
Что делать?