Как в PyQt5 поменять название и иконки окон, вызываемых из другого окна?

Хочу поменять иконки названия окон, с главным получилось, но при вызове других не получается.

Главное окно: mintro.py

При вызове окон из главного у них дефолтный "Dialog" и иконка: (my_weathshow.py)

введите сюда описание изображения

(my_bincalc.py):

введите сюда описание изображения

Если запускать my_bincalc.py и my_weathshow.py отдельно, то название и иконка меняются.

my_bincalc.py


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QIcon


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(452, 360)
        Dialog.setStyleSheet("background-color:#e6fad2;\n"
"")
        self.lineEdit = QtWidgets.QLineEdit(Dialog)
        self.lineEdit.setGeometry(QtCore.QRect(10, 70, 381, 31))
        self.lineEdit.setStyleSheet("color:#1db823;\n"
"font: 10pt \"Tw Cen MT Condensed Extra Bold\";\n"
"background-color:#0a2c40;\n"
"border:none;")
        self.lineEdit.setObjectName("lineEdit")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(10, 130, 111, 31))
        self.pushButton.setStyleSheet("\n"
"QPushButton {\n"
"\n"
"    color:#f1f52a;\n"
"    font: 8pt \"MS Serif\";\n"
"    font: 11pt \"MS Shell Dlg 2\";\n"
"    background-color:#822af5;\n"
"    border:none;\n"
"}\n"
"\n"
"QPushButton:hover {\n"
"    background-color:silver;\n"
"}\n"
"\n"
"QPushButton:pressed {\n"
"    background-color:red;\n"
"}\n"
"\n"
"\n"
"")
        self.pushButton.setObjectName("pushButton")
        self.lineEdit_2 = QtWidgets.QLineEdit(Dialog)
        self.lineEdit_2.setGeometry(QtCore.QRect(10, 240, 381, 31))
        self.lineEdit_2.setStyleSheet("color:#1db823;\n"
"font: 10pt \"Tw Cen MT Condensed Extra Bold\";\n"
"background-color:#0a2c40;\n"
"border:none;")
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.pushButton_2 = QtWidgets.QPushButton(Dialog)
        self.pushButton_2.setGeometry(QtCore.QRect(10, 300, 111, 31))
        self.pushButton_2.setStyleSheet("\n"
"QPushButton {\n"
"\n"
"    color:#f1f52a;\n"
"    font: 8pt \"MS Serif\";\n"
"    font: 11pt \"MS Shell Dlg 2\";\n"
"    background-color:#822af5;\n"
"    border:none;\n"
"}\n"
"\n"
"QPushButton:hover {\n"
"    background-color:silver;\n"
"}\n"
"\n"
"QPushButton:pressed {\n"
"    background-color:red;\n"
"}\n"
"\n"
"")
        self.pushButton_2.setObjectName("pushButton_2")
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(20, 20, 401, 31))
        self.label.setStyleSheet("font: 9pt \"MV Boli\";")
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Dialog)
        self.label_2.setGeometry(QtCore.QRect(20, 190, 411, 31))
        self.label_2.setStyleSheet("font: 9pt \"MV Boli\";")
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(Dialog)
        self.label_3.setGeometry(QtCore.QRect(156, 282, 291, 61))
        self.label_3.setText("")
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(Dialog)
        self.label_4.setGeometry(QtCore.QRect(156, 112, 291, 61))
        self.label_4.setText("")
        self.label_4.setObjectName("label_4")

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

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QtWidgets.QApplication.translate("Dialog", "Dialog", None, -1))
        self.pushButton.setText(QtWidgets.QApplication.translate("Dialog", "Преобразовать", None, -1))
        self.pushButton_2.setText(QtWidgets.QApplication.translate("Dialog", "Преобразовать", None, -1))
        self.label.setText(QtWidgets.QApplication.translate("Dialog", "    Перевести из десятичной системы исчисления в двоичную:", None, -1))
        self.label_2.setText(QtWidgets.QApplication.translate("Dialog", "    Перевести из двоичной системы исчисления в десятичную:", None, -1))


class Bincalc(QtWidgets.QDialog, Ui_Dialog):
    def __init__(self, parent=None):
        super(Bincalc, self).__init__(parent)
        self.setupUi(self)

        self.pushButton.clicked.connect(self.binarik)
        self.pushButton_2.clicked.connect(self.binarik_2)

    def binarik(self):
        num = int(self.lineEdit.text())
        newNum = ''
        while num > 0:
            newNum = str(num % 2) + newNum
            num //= 2
        self.label_4.setText(newNum)

    def binarik_2(self):
        a = self.lineEdit_2.text()
        def underdef(digit):
            length = len(digit)                   
            helpdig = 0           
            for i in range(0, int(length)):               
                helpdig = helpdig + int(digit[i]) * (2**(int(length) - i - 1))           
            return helpdig  

        self.label_3.setText(str(underdef(a)))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Bincalc()
    w.show()
    w.setWindowTitle('Бинарный калькулятор')
    w.setWindowIcon(QIcon('knif.ico'))
    sys.exit(app.exec_())

my_weathshow.py

from PyQt5 import QtCore, QtGui, QtWidgets
import pyowm
from PyQt5.QtGui import QIcon
class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(451, 363)
        Dialog.setStyleSheet("background-color:#90d5fc;")
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(90, 10, 251, 51))
        self.label.setStyleSheet("font: 9pt \"MV Boli\";")
        self.label.setObjectName("label")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(260, 130, 141, 51))
        self.pushButton.setStyleSheet("QPushButton {\n"
"color:#2e0ff7;\n"
"background-color:#83f70f;\n"
"border:none;\n"
"font: 12pt \"Niagara Engraved\";\n"
"}\n"
"\n"
"QPushButton:hover {\n"
"    background-color:silver;\n"
"}\n"
"\n"
"QPushButton:pressed {\n"
"    background-color:red;\n"
"}\n"
"")
        self.pushButton.setObjectName("pushButton")
        self.lineEdit = QtWidgets.QLineEdit(Dialog)
        self.lineEdit.setGeometry(QtCore.QRect(22, 70, 381, 41))
        self.lineEdit.setStyleSheet("color:#404dc2;\n"
"border:none;\n"
"background:#77a17b;\n"
"font: 15pt \"Nirmala UI\";")
        self.lineEdit.setObjectName("lineEdit")
        self.label_2 = QtWidgets.QLabel(Dialog)
        self.label_2.setGeometry(QtCore.QRect(10, 190, 431, 51))
        self.label_2.setStyleSheet("color:#db145d;\n"
"font: 75 italic 12pt \"MS Sans Serif\";")
        self.label_2.setText("")
        self.label_2.setTextFormat(QtCore.Qt.PlainText)
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(Dialog)
        self.label_3.setGeometry(QtCore.QRect(6, 240, 441, 51))
        self.label_3.setStyleSheet("color:#db145d;\n"
"font: 75 italic 12pt \"MS Sans Serif\";")
        self.label_3.setText("")
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(Dialog)
        self.label_4.setGeometry(QtCore.QRect(6, 292, 441, 51))
        self.label_4.setStyleSheet("color:#db145d;\n"
"font: 75 italic 12pt \"MS Sans Serif\";")
        self.label_4.setText("")
        self.label_4.setObjectName("label_4")

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

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QtWidgets.QApplication.translate("Dialog", "Dialog", None, -1))
        self.label.setText(QtWidgets.QApplication.translate("Dialog", "Введите город, чтобы узнать погоду:", None, -1))
        self.pushButton.setText(QtWidgets.QApplication.translate("Dialog", "Узнать погоду", None, -1))

class Weathshow(QtWidgets.QDialog, Ui_Dialog):
    def __init__(self, parent=None):
        super(Weathshow, self).__init__(parent)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.get_weather_city)

    def get_weather_city(self):
        owm = pyowm.OWM('API key', language = "ru")
        place = self.lineEdit.text()
        observation = owm.weather_at_place(place)
        w = observation.get_weather()
        temper = w.get_temperature('celsius')['temp']
        self.label_2.setText(f"Температура сейчас {temper} по Цельсию.")
        self.label_3.setText( f"В городе {place} сейчаc {w.get_detailed_status()}.")
        if temper < 10:
            self.label_4.setText( f"На улице довольно холодно: одевайтесь тепло." )
        elif temper < 20:
            self.label_4.setText( f"На улице холодно: одевайтесь потеплее." )
        else:
            self.label_4.setText( f"На улице тепло: одевайтесь свободно." )


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    m = Weathshow()
    m.show()
    m.setWindowTitle('Узнать погоду')
    m.setWindowIcon(QIcon('knif.ico'))
    sys.exit(app.exec_())

mintro.py

from PyQt5 import QtCore, QtGui, QtWidgets
from my_bincalc import Bincalc                                       
from my_weathshow import Weathshow                                  
from PyQt5.QtGui import QIcon
class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(371, 300)
        Dialog.setStyleSheet("background-color:#8430b8;")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(30, 160, 311, 51))
        self.pushButton.setStyleSheet("color:#d7e535;\n"
"font: 14pt \"Onyx\";\n"
"background-color:#494f8a;")
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(Dialog)
        self.pushButton_2.setGeometry(QtCore.QRect(30, 220, 311, 51))
        self.pushButton_2.setStyleSheet("color:#e01414;\n"
"font: 14pt \"Onyx\";\n"
"background-color:#dff022;")
        self.pushButton_2.setObjectName("pushButton_2")
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(0, 30, 371, 51))
        self.label.setStyleSheet("color:#22f70f;\n"
"font: 8pt \"Playbill\";\n"
"border:none;\n"
"")
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Dialog)
        self.label_2.setGeometry(QtCore.QRect(30, 70, 321, 81))
        self.label_2.setStyleSheet("font: 11pt \"MV Boli\";\n"
"")
        self.label_2.setObjectName("label_2")

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

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QtWidgets.QApplication.translate("Dialog", "Dialog", None, -1))
        self.pushButton.setText(QtWidgets.QApplication.translate("Dialog", "Бинарный калькулятор", None, -1))
        self.pushButton_2.setText(QtWidgets.QApplication.translate("Dialog", "Узнать погоду в городе", None, -1))
        self.label.setText(QtWidgets.QApplication.translate("Dialog", "<html><head/><body><p align=\"center\"><span style=\" font-size:36pt; color:#ff0000;\">SWISS </span><span style=\" font-size:36pt; color:#ffffff;\">KNIFE </span><span style=\" font-size:12pt;\">v 1.0</span></p><p><span style=\" font-size:36pt;\"><br/></span></p><p align=\"center\"><span style=\" font-size:36pt;\"><br/></span></p></body></html>", None, -1))
        self.label_2.setText(QtWidgets.QApplication.translate("Dialog", "Выберите одну из предложенных функций:", None, -1))


class Dialog(QtWidgets.QDialog, Ui_Dialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        self.setupUi(self)

        self.pushButton.clicked.connect(self.bincalc)
        self.pushButton_2.clicked.connect(self.weathshow)   

    def bincalc(self):                                          
        self.bincalc = Bincalc()                                
        self.bincalc.show()

    def weathshow(self):                                        
        self.weathshow = Weathshow()
        self.weathshow.show()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Dialog()
    w.show()
    w.setWindowTitle('Swiss Knife v.1.0')
    w.setWindowIcon(QIcon('knif.ico'))
    sys.exit(app.exec_())


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

Автор решения: S. Nick

вы должны понимать, что при импорте, например from my_bincalc import Bincalc вы по сути импортируете только класс Bincalc. То что находится ниже if __name__ == "__main__": не выполняется.

Поэтому у вас есть два варианта. Первый, который я привел в примере. Второй, добавить строки: self.setWindowTitle('Бинарный калькулятор') и self.setWindowIcon(QIcon('knif.ico')) в конструктор класса __init__ , в данном случае Bincalc после строки self.setupUi(self).

Например так:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QIcon
from my_bincalc import Bincalc                                       
from my_weathshow import Weathshow                                  


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(371, 300)
        Dialog.setStyleSheet("background-color:#8430b8;")
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(30, 160, 311, 51))
        self.pushButton.setStyleSheet("color:#d7e535;\n"
"font: 14pt \"Onyx\";\n"
"background-color:#494f8a;")
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(Dialog)
        self.pushButton_2.setGeometry(QtCore.QRect(30, 220, 311, 51))
        self.pushButton_2.setStyleSheet("color:#e01414;\n"
"font: 14pt \"Onyx\";\n"
"background-color:#dff022;")
        self.pushButton_2.setObjectName("pushButton_2")
        self.label = QtWidgets.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(0, 30, 371, 51))
        self.label.setStyleSheet("color:#22f70f;\n"
"font: 8pt \"Playbill\";\n"
"border:none;\n"
"")
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Dialog)
        self.label_2.setGeometry(QtCore.QRect(30, 70, 321, 81))
        self.label_2.setStyleSheet("font: 11pt \"MV Boli\";\n"
"")
        self.label_2.setObjectName("label_2")

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

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(QtWidgets.QApplication.translate("Dialog", "Dialog", None, -1))
        self.pushButton.setText(QtWidgets.QApplication.translate("Dialog", "Бинарный калькулятор", None, -1))
        self.pushButton_2.setText(QtWidgets.QApplication.translate("Dialog", "Узнать погоду в городе", None, -1))
        self.label.setText(QtWidgets.QApplication.translate("Dialog", "<html><head/><body><p align=\"center\"><span style=\" font-size:36pt; color:#ff0000;\">SWISS </span><span style=\" font-size:36pt; color:#ffffff;\">KNIFE </span><span style=\" font-size:12pt;\">v 1.0</span></p><p><span style=\" font-size:36pt;\"><br/></span></p><p align=\"center\"><span style=\" font-size:36pt;\"><br/></span></p></body></html>", None, -1))
        self.label_2.setText(QtWidgets.QApplication.translate("Dialog", "Выберите одну из предложенных функций:", None, -1))


class Dialog(QtWidgets.QDialog, Ui_Dialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        self.setupUi(self)

        self.pushButton.clicked.connect(self.bincalc)
        self.pushButton_2.clicked.connect(self.weathshow)   

    def bincalc(self):                                          
        self.bincalc = Bincalc()  
        self.bincalc.setWindowTitle('Бинарный калькулятор')          # +++
        self.bincalc.setWindowIcon(QIcon('knif.ico'))                # +++   
        self.bincalc.show()

    def weathshow(self):                                        
        self.weathshow = Weathshow()
        self.weathshow.setWindowTitle('Узнать погоду')               # +++
        self.weathshow.setWindowIcon(QIcon('knif.ico'))              # +++
        self.weathshow.show()

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Dialog()
    w.show()
    w.setWindowTitle('Swiss Knife v.1.0')
    w.setWindowIcon(QIcon('knif.ico'))
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка