Ошибка в коде (pyqt5)

Пишу действие, если кнопка нажата, должна происходить функция weather_city. Но выдает ошибку:

 "AttributeError: 'Ui_main' object has no attribute 'PushButton'"

Main.py

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from gui import Ui_main


#create
app = QtWidgets.QApplication(sys.argv)

#init
main = QtWidgets.QDialog()
ui = Ui_main()
ui.setupUi(main)
main.show()
def weather_city():
    print("WORKING")

ui.PushButton.clicked.connect( weather_city )


#loop
sys.exit(app.exec_())

gui.py

# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_main(object):
    def setupUi(self, main):
        main.setObjectName("main")
        main.resize(502, 243)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("res/icon.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        main.setWindowIcon(icon)
        main.setStyleSheet("background-color:#241f1f;\n"
"color:#dbd3d3 ;")
        self.GET = QtWidgets.QPushButton(main)
        self.GET.setGeometry(QtCore.QRect(170, 160, 151, 21))
        self.GET.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.GET.setStyleSheet("QPushButton{\n"
"font: 8pt \"Minecrafter\";\n"
"border:none;\n"
"}\n"
"\n"
"QPushButton:hover{\n"
"\n"
"color:#2c3d91;\n"
"\n"
"}")
        self.GET.setCheckable(False)
        self.GET.setChecked(False)
        self.GET.setFlat(False)
        self.GET.setObjectName("GET")
        self.textEdit = QtWidgets.QTextEdit(main)
        self.textEdit.setGeometry(QtCore.QRect(40, 90, 431, 71))
        font = QtGui.QFont()
        font.setFamily("Minecrafter")
        font.setPointSize(20)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.textEdit.setFont(font)
        self.textEdit.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.IBeamCursor))
        self.textEdit.setStyleSheet("color:#dbd3d3;\n"
"background-color:#2e2e2e ;\n"
"border:none;\n"
"font: 20pt \"Minecrafter\";")
        self.textEdit.setObjectName("textEdit")
        self.label = QtWidgets.QLabel(main)
        self.label.setGeometry(QtCore.QRect(60, 0, 391, 81))
        font = QtGui.QFont()
        font.setFamily("Minecrafter")
        font.setPointSize(25)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.label.setFont(font)
        self.label.setStyleSheet("font: 25pt \"Minecrafter\";")
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(main)
        self.label_2.setGeometry(QtCore.QRect(160, 200, 231, 31))
        font = QtGui.QFont()
        font.setFamily("Minecrafter")
        font.setPointSize(10)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.label_2.setFont(font)
        self.label_2.setStyleSheet("font: 10pt \"Minecrafter\";")
        self.label_2.setObjectName("label_2")
        self.pic = QtWidgets.QLabel(main)
        self.pic.setGeometry(QtCore.QRect(100, 200, 61, 51))
        self.pic.setText("")
        self.pic.setTextFormat(QtCore.Qt.MarkdownText)
        self.pic.setPixmap(QtGui.QPixmap("res/no.png"))
        self.pic.setObjectName("pic")
        self.line = QtWidgets.QFrame(main)
        self.line.setGeometry(QtCore.QRect(-60, 180, 591, 20))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.line_2 = QtWidgets.QFrame(main)
        self.line_2.setGeometry(QtCore.QRect(20, 0, 21, 191))
        self.line_2.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_2.setObjectName("line_2")
        self.line_3 = QtWidgets.QFrame(main)
        self.line_3.setGeometry(QtCore.QRect(470, 0, 21, 191))
        self.line_3.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_3.setObjectName("line_3")

        self.retranslateUi(main)
        QtCore.QMetaObject.connectSlotsByName(main)

    def retranslateUi(self, main):
        _translate = QtCore.QCoreApplication.translate
        main.setWindowTitle(_translate("main", "Погода"))
        self.GET.setText(_translate("main", "Получить погоду"))
        self.label.setText(_translate("main", "Укажите город"))
        self.label_2.setText(_translate("main", "Не получена погода"))


Ответы (2 шт):

Автор решения: gil9red

В Ui_main единственная кнопка имеет имя (Object name) GET, поэтому у вас должно быть так:

ui.GET.clicked.connect(weather_city)

PS.

Рекомендую давать названия (в Object name), которые будут понятны :)

→ Ссылка
Автор решения: S. Nick

кроме рекомендаций от @gil9red и вам рекомендую сразу погрузиться в ООП и использовать классы:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

#from gui import Ui_main
class Ui_main(object):
    def setupUi(self, main):
        main.setObjectName("main")
        main.resize(502, 243)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("res/icon.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        main.setWindowIcon(icon)
        main.setStyleSheet("background-color:#241f1f;\n"
"color:#dbd3d3 ;")
        self.GET = QtWidgets.QPushButton(main)
        self.GET.setGeometry(QtCore.QRect(170, 160, 151, 21))
        self.GET.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.GET.setStyleSheet("QPushButton{\n"
"font: 8pt \"Minecrafter\";\n"
"border:none;\n"
"}\n"
"\n"
"QPushButton:hover{\n"
"\n"
"color:#2c3d91;\n"
"\n"
"}")
        self.GET.setCheckable(False)
        self.GET.setChecked(False)
        self.GET.setFlat(False)
        self.GET.setObjectName("GET")
        self.textEdit = QtWidgets.QTextEdit(main)
        self.textEdit.setGeometry(QtCore.QRect(40, 90, 431, 71))
        font = QtGui.QFont()
        font.setFamily("Minecrafter")
        font.setPointSize(20)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.textEdit.setFont(font)
        self.textEdit.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.IBeamCursor))
        self.textEdit.setStyleSheet("color:#dbd3d3;\n"
"background-color:#2e2e2e ;\n"
"border:none;\n"
"font: 20pt \"Minecrafter\";")
        self.textEdit.setObjectName("textEdit")
        self.label = QtWidgets.QLabel(main)
        self.label.setGeometry(QtCore.QRect(60, 0, 391, 81))
        font = QtGui.QFont()
        font.setFamily("Minecrafter")
        font.setPointSize(25)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.label.setFont(font)
        self.label.setStyleSheet("font: 25pt \"Minecrafter\";")
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(main)
        self.label_2.setGeometry(QtCore.QRect(160, 200, 231, 31))
        font = QtGui.QFont()
        font.setFamily("Minecrafter")
        font.setPointSize(10)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(50)
        self.label_2.setFont(font)
        self.label_2.setStyleSheet("font: 10pt \"Minecrafter\";")
        self.label_2.setObjectName("label_2")
        self.pic = QtWidgets.QLabel(main)
        self.pic.setGeometry(QtCore.QRect(100, 200, 61, 51))
        self.pic.setText("")
        
        # Текстовая строка интерпретируется как текст в формате Markdown. 
        # Это значение перечисления было добавлено в Qt 5.14.
        #self.pic.setTextFormat(QtCore.Qt.MarkdownText)
        self.pic.setTextFormat(QtCore.Qt.PlainText)
        
        self.pic.setPixmap(QtGui.QPixmap("res/no.png"))
        self.pic.setObjectName("pic")
        self.line = QtWidgets.QFrame(main)
        self.line.setGeometry(QtCore.QRect(-60, 180, 591, 20))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.line_2 = QtWidgets.QFrame(main)
        self.line_2.setGeometry(QtCore.QRect(20, 0, 21, 191))
        self.line_2.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_2.setObjectName("line_2")
        self.line_3 = QtWidgets.QFrame(main)
        self.line_3.setGeometry(QtCore.QRect(470, 0, 21, 191))
        self.line_3.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_3.setObjectName("line_3")

        self.retranslateUi(main)
        QtCore.QMetaObject.connectSlotsByName(main)

    def retranslateUi(self, main):
        _translate = QtCore.QCoreApplication.translate
        main.setWindowTitle(_translate("main", "Погода"))
        self.GET.setText(_translate("main", "Получить погоду"))
        self.label.setText(_translate("main", "Укажите город"))
        self.label_2.setText(_translate("main", "Не получена погода"))
        self.label_2.adjustSize()
        

class Dialog(QtWidgets.QDialog, Ui_main):
    def __init__(self):
        super().__init__()
        
        self.setupUi(self)
        self.GET.clicked.connect(self.weather_city)

    def weather_city(self):
        print("WORKING") 
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setText("WORKING")        
        
        
if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = Dialog()
    w.show()
    sys.exit(app.exec_())
→ Ссылка