По-видимому, удаление виджетов без их реального удаления из макетов возможно в PyQt6. Однако не существует задокументированного или предоставленного способа действительно принудительного удаления виджетов (даже в частном случае: из CentralWidget) и, по сути, прекращения их существования.
Я отрендерил свой приложение без рамки и сделал окно без рамки полностью прозрачным с помощью self.setWindowFlags(Qt.WindowType.FramelessWindowHint) и self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground). Короче говоря, CentralWidget;
container_frame = QWidget() container_frame.setObjectName('Container') self.setCentralWidget(container_frame)
теперь ПО-ВИДИМОМУ, это мое новое окно. Я добавил несколько виджетов входа вContainer_frame, но, конечно, в любом обычном приложении после нажатия кнопки входа в область аутентификации приложение должно направить вас к его фактическому содержимому. Для этого, вероятно, потребуется избавиться от виджетов входа вContainer_frame . Поскольку в моем контексте мне действительно не нужны виджеты входа в мое приложение, я планирую просто выбросить их в мусорное ведро и спустить в унитаз. Но я не знаю, как это сделать, и вопросы в Интернете не очень хорошо соответствуют моему случаю: никому не нужно делать свое исходное окно прозрачным и создавать новое - CentralWidget. Как удалить виджеты входа?
Я пытался найти решения на нескольких веб-сайтах вопросов и ответов, но безуспешно. В некотором контексте я пытаюсь удалить виджеты входа в триггерную функцию;
from PyQt6.QtCore import QRect, QRectF, QEvent, QDate, Qt
from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QLabel, QLineEdit, QPushButton, QProgressDialog
from PyQt6.QtGui import QFont, QCursor
class App(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('You should not see this')
self.setWindowFlags(Qt.WindowType.FramelessWindowHint)
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
self.resize(QApplication.primaryScreen().availableSize().width(),
QApplication.primaryScreen().availableSize().height() + 4)
container_frame = QWidget()
container_frame.setObjectName('Container')
container_frame.setStyleSheet('''
#Container {
background: qlineargradient(x1:0 y1:0, x2:1 y2:1, stop:0 #65ade9, stop:1 #0c75cd);
border-radius: 25px;
}
''')
self.setCentralWidget(container_frame)
title = QLabel('Sign Into My Kewl And Epik App', container_frame)
title.setFont(QFont('', 40, 700))
title.setStyleSheet('color: white')
title.move(120, 120)
username_label = QLabel('Username', container_frame)
username_label.setFont(QFont('', 20, 400))
username_label.setStyleSheet('color: white; letter-spacing: 1px;')
username_label.move(120, 240)
username_input = QLineEdit(container_frame)
username_input.setFont(QFont('', 20, 400))
username_input.setStyleSheet('''
QLineEdit {
background-color: transparent;
border: none;
border-bottom: 2px solid white;
color: white;
letter-spacing: 1px;
}
''')
username_input.resize(300, 30)
username_input.move(120, 270)
username_input.returnPressed.connect(lambda: self.focus_password(password_input))
password_label = QLabel('Password', container_frame)
password_label.setFont(QFont('', 20, 400))
password_label.setStyleSheet('color: white; letter-spacing: 1px;')
password_label.move(120, 360)
password_input = QLineEdit(container_frame)
password_input.setFont(QFont('', 20, 400))
password_input.setEchoMode(QLineEdit.EchoMode.Password)
password_input.setStyleSheet('''
QLineEdit {
background-color: transparent;
border: none;
border-bottom: 2px solid white;
color: white;
letter-spacing: 1px;
}
''')
password_input.resize(300, 30)
password_input.move(120, 390)
password_input.returnPressed.connect(lambda: self.triggered())
button = QPushButton('Authenticate', container_frame)
button.setFont(QFont('', 20, 400))
button.setStyleSheet('''
QPushButton {
background-color: #0c5a9c;
border: none;
border-radius: 5px;
color: white;
letter-spacing: 1px;
}
''')
button.resize(300, 55)
button.move(120, 480)
button.clicked.connect(lambda: self.triggered())
button.setCursor(QCursor(Qt.CursorShape.PointingHandCursor))
container_frame.mousePressEvent = lambda event: self.remove_focus(event, username_input, password_input)
def focus_password(self, password_input): password_input.setFocus()
def remove_focus(self, event, *fields): [field.clearFocus() for field in fields]
def triggered(self): print('Authentication triggered. ')
# Run
if __name__ == '__main__':
erm = QApplication([])
app = App()
app.show()
erm.exec()
Подробнее здесь: https://stackoverflow.com/questions/791 ... dget-pyqt6
Удаление виджетов из CentralWidget PyQt6 ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как изменить параметры конфигурации набора виджетов iOS на основе семейства виджетов
Anonymous » » в форуме IOS - 0 Ответы
- 29 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Передача ссылки на массив виджетов на функцию влияет на значения виджетов
Anonymous » » в форуме Python - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Передача ссылки на массив виджетов на функцию влияет на значения виджетов
Anonymous » » в форуме Python - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Передача ссылки на массив виджетов на функцию влияет на значения виджетов
Anonymous » » в форуме Python - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-