AttributeError: 'Ui_ProxyTab' object has no attribute 'setWindowFlags'

Я создал приложение в Qt Designer, и конвертировал .ui в .py для удобства.
В основном окне, которое будет открываться первым всё нормально, а вот окно, которое я хочу открыть при нажатии на кнопку нет и вылезает ошибка.

AttributeError: 'Ui_ProxyTab' object has no attribute 'setWindowFlags'


Код этого окна:

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


class Ui_ProxyTab(object):
    def setupUi(self, ProxyTab):

        #self.setWindowFlags(Qt.FramelessWindowHint) # вот эти 2 аттрибута
        #self.setAttribute(Qt.WA_TranslucentBackground) # не работают

        ProxyTab.setObjectName("ProxyTab")
        ProxyTab.resize(441, 369)
        self.frame = QtWidgets.QFrame(ProxyTab)
        self.frame.setGeometry(QtCore.QRect(10, 10, 421, 351))
        self.frame.setStyleSheet("background-color: rgb(39, 39, 39); border-radius: 10px;")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        self.close = QtWidgets.QPushButton(self.frame)
        self.close.setGeometry(QtCore.QRect(390, 10, 22, 22))
        self.close.setStyleSheet("border-radius: 10px;\n"
"background-color: rgb(255, 0, 0);")
        self.close.setText("")
        self.close.setObjectName("close")
        self.proxytab = QtWidgets.QWidget(self.frame)
        self.proxytab.setGeometry(QtCore.QRect(110, 40, 301, 251))
        self.proxytab.setObjectName("proxytab")
        self.use_proxy = QtWidgets.QCheckBox(self.proxytab)
        self.use_proxy.setGeometry(QtCore.QRect(10, 10, 101, 17))
        self.use_proxy.setStyleSheet("font: 87 8pt \"Arial Black\";\n"
"color: rgb(255, 255, 255);")
        self.use_proxy.setObjectName("use_proxy")
        self.use_proxy.stateChanged.connect(self.proxy_checkbox)
        self.proxy_line = QtWidgets.QLineEdit(self.proxytab)
        self.proxy_line.setGeometry(QtCore.QRect(10, 170, 131, 22))
        self.proxy_line.setStyleSheet("border-style: outset;\n"
"background-color: rgb(236, 236, 236);\n"
"border-width: 1px;\n"
"border-radius: 10px;")
        self.proxy_line.hide()
        self.proxy_line.setObjectName("proxy_line")
        self.add_proxy = QtWidgets.QPushButton(self.proxytab)
        self.add_proxy.setGeometry(QtCore.QRect(150, 170, 61, 22))
        self.add_proxy.setStyleSheet("font: 87 8pt \"Arial Black\";\n"
"border-radius: 10px;\n"
"background-color: rgb(0, 170, 255);\n"
"color: rgb(255, 255, 255);\n"
"selection-background-color: rgb(0, 145, 215);")
        self.add_proxy.hide()
        self.add_proxy.setObjectName("add_proxy")
        self.remove_proxy = QtWidgets.QPushButton(self.proxytab)
        self.remove_proxy.setGeometry(QtCore.QRect(220, 170, 61, 22))
        self.remove_proxy.setStyleSheet("font: 87 8pt \"Arial Black\";\n"
"border-radius: 10px;\n"
"background-color: rgb(0, 170, 255);\n"
"color: rgb(255, 255, 255);\n"
"selection-background-color: rgb(0, 145, 215);")
        self.remove_proxy.hide()
        self.remove_proxy.setObjectName("remove_proxy")
        self.proxy_list = QtWidgets.QListWidget(self.proxytab)
        self.proxy_list.setGeometry(QtCore.QRect(10, 40, 271, 121))
        self.proxy_list.hide()
        self.proxy_list.setStyleSheet("background-color: rgb(236, 236, 236);")
        self.proxy_list.setObjectName("proxy_list")
        self.save = QtWidgets.QPushButton(self.frame)
        self.save.setGeometry(QtCore.QRect(210, 300, 101, 35))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setPointSize(8)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(10)
        self.save.setFont(font)
        self.save.setToolTipDuration(1)
        self.save.setAutoFillBackground(False)
        self.save.setStyleSheet("border-radius: 15px;\n"
"background-color: rgb(0, 170, 255);\n"
"font: 87 8pt \"Arial Black\";\n"
"color: rgb(255, 255, 255);\n"
"selection-background-color: rgb(0, 145, 215);")
        self.save.setObjectName("check")
        self.proxywindow = QtWidgets.QPushButton(self.frame)
        self.proxywindow.setGeometry(QtCore.QRect(10, 40, 91, 23))
        self.proxywindow.setStyleSheet("font: 87 8pt \"Arial Black\";\n"
"border-radius: 5px;\n"
"background-color: rgb(0, 170, 255);\n"
"color: rgb(255, 255, 255);\n"
"selection-background-color: rgb(0, 145, 215);")
        self.proxywindow.setObjectName("proxywindow")
        self.infowindow = QtWidgets.QPushButton(self.frame)
        self.infowindow.setGeometry(QtCore.QRect(10, 310, 91, 23))
        self.infowindow.setStyleSheet("font: 87 8pt \"Arial Black\";\n"
"border-radius: 5px;\n"
"background-color: rgb(0, 170, 255);\n"
"color: rgb(255, 255, 255);\n"
"selection-background-color: rgb(0, 145, 215);")
        self.infowindow.setObjectName("infowindow")

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

    def retranslateUi(self, ProxyTab):
        _translate = QtCore.QCoreApplication.translate
        ProxyTab.setWindowTitle(_translate("Dialog", "Dialog"))
        self.use_proxy.setText(_translate("Dialog", "Use Proxy"))
        self.proxy_line.setPlaceholderText(_translate("Dialog", "  ip:port:login:password"))
        self.add_proxy.setText(_translate("Dialog", "Add"))
        self.remove_proxy.setText(_translate("Dialog", "Remove"))
        self.save.setText(_translate("Dialog", "Save"))
        self.proxywindow.setText(_translate("Dialog", "Proxy"))
        self.infowindow.setText(_translate("Dialog", "Info"))

    def proxy_checkbox(self):
       if self.use_proxy.isChecked():
           self.proxy_line.show()
           self.add_proxy.show()
           self.remove_proxy.show()
           self.proxy_list.show()
       else:
           self.proxy_line.hide()
           self.add_proxy.hide()
           self.remove_proxy.hide()
           self.proxy_list.hide()

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

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

НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА.
Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


class Ui_ProxyTab(object):
    def setupUi(self, ProxyTab):
        ProxyTab.setObjectName("ProxyTab")
        ProxyTab.resize(441, 369)
        
        self.frame = QtWidgets.QFrame(ProxyTab)
        self.frame.setGeometry(QtCore.QRect(10, 10, 421, 351))
        self.frame.setStyleSheet("background-color: rgb(39, 39, 39); border-radius: 10px;")
        self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame.setObjectName("frame")
        
        self.close = QtWidgets.QPushButton(self.frame)
        self.close.setGeometry(QtCore.QRect(390, 10, 22, 22))
        self.close.setStyleSheet("border-radius: 10px;\n"
"background-color: rgb(255, 0, 0);")
        self.close.setText("")
        self.close.setObjectName("close")
        
        self.proxytab = QtWidgets.QWidget(self.frame)
        self.proxytab.setGeometry(QtCore.QRect(110, 40, 301, 251))
        self.proxytab.setObjectName("proxytab")
        self.use_proxy = QtWidgets.QCheckBox(self.proxytab)
        self.use_proxy.setGeometry(QtCore.QRect(10, 10, 101, 17))
        self.use_proxy.setStyleSheet("font: 87 8pt \"Arial Black\";\n"
"color: rgb(255, 255, 255);")
        self.use_proxy.setObjectName("use_proxy")
        
#        self.use_proxy.stateChanged.connect(self.proxy_checkbox)
        
        self.proxy_line = QtWidgets.QLineEdit(self.proxytab)
        self.proxy_line.setGeometry(QtCore.QRect(10, 170, 131, 22))
        self.proxy_line.setStyleSheet("border-style: outset;\n"
"background-color: rgb(236, 236, 236);\n"
"border-width: 1px;\n"
"border-radius: 10px;")
        self.proxy_line.hide()
        self.proxy_line.setObjectName("proxy_line")
        
        self.add_proxy = QtWidgets.QPushButton(self.proxytab)
        self.add_proxy.setGeometry(QtCore.QRect(150, 170, 61, 22))
        self.add_proxy.setStyleSheet("font: 87 8pt \"Arial Black\";\n"
"border-radius: 10px;\n"
"background-color: rgb(0, 170, 255);\n"
"color: rgb(255, 255, 255);\n"
"selection-background-color: rgb(0, 145, 215);")
        self.add_proxy.hide()
        self.add_proxy.setObjectName("add_proxy")
        
        self.remove_proxy = QtWidgets.QPushButton(self.proxytab)
        self.remove_proxy.setGeometry(QtCore.QRect(220, 170, 61, 22))
        self.remove_proxy.setStyleSheet("font: 87 8pt \"Arial Black\";\n"
"border-radius: 10px;\n"
"background-color: rgb(0, 170, 255);\n"
"color: rgb(255, 255, 255);\n"
"selection-background-color: rgb(0, 145, 215);")
        self.remove_proxy.hide()
        self.remove_proxy.setObjectName("remove_proxy")
        
        self.proxy_list = QtWidgets.QListWidget(self.proxytab)
        self.proxy_list.setGeometry(QtCore.QRect(10, 40, 271, 121))
        self.proxy_list.hide()
        self.proxy_list.setStyleSheet("background-color: rgb(236, 236, 236);")
        self.proxy_list.setObjectName("proxy_list")
        
        self.save = QtWidgets.QPushButton(self.frame)
        self.save.setGeometry(QtCore.QRect(210, 300, 101, 35))
        font = QtGui.QFont()
        font.setFamily("Arial Black")
        font.setPointSize(8)
        font.setBold(False)
        font.setItalic(False)
        font.setWeight(10)
        self.save.setFont(font)
        self.save.setToolTipDuration(1)
        self.save.setAutoFillBackground(False)
        self.save.setStyleSheet("border-radius: 15px;\n"
"background-color: rgb(0, 170, 255);\n"
"font: 87 8pt \"Arial Black\";\n"
"color: rgb(255, 255, 255);\n"
"selection-background-color: rgb(0, 145, 215);")
        self.save.setObjectName("check")
        
        self.proxywindow = QtWidgets.QPushButton(self.frame)
        self.proxywindow.setGeometry(QtCore.QRect(10, 40, 91, 23))
        self.proxywindow.setStyleSheet("font: 87 8pt \"Arial Black\";\n"
"border-radius: 5px;\n"
"background-color: rgb(0, 170, 255);\n"
"color: rgb(255, 255, 255);\n"
"selection-background-color: rgb(0, 145, 215);")
        self.proxywindow.setObjectName("proxywindow")
        self.infowindow = QtWidgets.QPushButton(self.frame)
        self.infowindow.setGeometry(QtCore.QRect(10, 310, 91, 23))
        self.infowindow.setStyleSheet("font: 87 8pt \"Arial Black\";\n"
"border-radius: 5px;\n"
"background-color: rgb(0, 170, 255);\n"
"color: rgb(255, 255, 255);\n"
"selection-background-color: rgb(0, 145, 215);")
        self.infowindow.setObjectName("infowindow")

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

    def retranslateUi(self, ProxyTab):
        _translate = QtCore.QCoreApplication.translate
        ProxyTab.setWindowTitle(_translate("Dialog", "Dialog"))
        self.use_proxy.setText(_translate("Dialog", "Use Proxy"))
        self.proxy_line.setPlaceholderText(_translate("Dialog", "  ip:port:login:password"))
        self.add_proxy.setText(_translate("Dialog", "Add"))
        self.remove_proxy.setText(_translate("Dialog", "Remove"))
        self.save.setText(_translate("Dialog", "Save"))
        self.proxywindow.setText(_translate("Dialog", "Proxy"))
        self.infowindow.setText(_translate("Dialog", "Info"))


# ------------> vvvvvvv<>vvvvvvvvvvv <---------------------------------
class OK_Window(QWidget, Ui_ProxyTab):
    def __init__(self):
        super().__init__()
        
        self.setupUi(self)  
        

        self.setWindowFlags(Qt.FramelessWindowHint)             # вот эти 2 аттрибута
        self.setAttribute(Qt.WA_TranslucentBackground)          # работают
        
        self.use_proxy.stateChanged.connect(self.proxy_checkbox)
        
    def proxy_checkbox(self):
       if self.use_proxy.isChecked():
           self.proxy_line.show()
           self.add_proxy.show()
           self.remove_proxy.show()
           self.proxy_list.show()
       else:
           self.proxy_line.hide()
           self.add_proxy.hide()
           self.remove_proxy.hide()
           self.proxy_list.hide()
           
           
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    mw = OK_Window()
    mw.show()
    sys.exit(app.exec_())           

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

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

→ Ссылка