Удаление виджетов из CentralWidget PyQt6Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Удаление виджетов из CentralWidget PyQt6

Сообщение Anonymous »

По-видимому, удаление виджетов без их реального удаления из макетов возможно в 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»