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_())

