чего я хочу добиться Я изучаю, как использовать pyqt5 с этим моим проектом.
Я попытался загрузить что-то под названием BlurWindow, но оно продолжало выдавать мне ошибку параметра, поэтому я вернулся к попытке использовать QGraphicBlurEffect, но он размывает все внутри моего MainWindow.
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QMainWindow, QApplication
import sys
from PyQt5.uic import loadUi
from BlurWindow.blurWindow import blur
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
loadUi(r'D:\Workspace\Qt Designer\blur bg\blurtest.ui',self)
self.setAttribute(Qt.WA_TranslucentBackground)
hWnd = self.winId()
print(hWnd)
blur(hWnd)
self.setStyleSheet("background-color: rgba(0, 0, 0, 0)")
app=QApplication(sys.argv)
mainwindow=MainWindow()
widget=QtWidgets.QStackedWidget()
widget.setWindowOpacity(0.5)
widget.addWidget(mainwindow)
widget.setFixedHeight(600)
widget.setFixedWidth(800)
widget.show()
sys.exit(app.exec_())
@musicamante эй, извините, это было не так заметно раньше. я обновил скриншот. это была сс боковой панели в настройках Windows. насколько я могу сказать, это эффект непрозрачности + размытия, я не знаю, как применить эффект размытия в pyqt5, не размывая все внутри окна.
QGraphicsEffect применяется к содержимому виджетов, а не к их «фону». Если вы пытались использовать BlurWindow, просто покажите нам, что вы пробовали, и какую ошибку вы получили.
@musicmante вот что я получаю от blurwindow
Все еще жду ошибки, которую вы упомянули.
@musicamante эта ошибка больше не появляется. сейчас код размытия ничего не делает. мое окно, созданное в qtdesigner, изначально было сплошным черным с тестовым текстом в белом между ними. теперь он стал как по умолчанию серовато-белый бг и без эффекта размытия
Попробуйте удалить setWindowOpacity()
, так как это может помешать эффекту, а также попробуйте использовать этот blur()
с основным окном (без какого-либо содержимого), чтобы исключить возможные косвенно связанные проблемы. В конце концов свяжитесь с автором этой библиотеки или изучите ее источники. Кроме того, не добавляйте QMainWindow в составной виджет.
@musicamante удаление setwindowopacity просто дает мне мой оригинальный дизайн, который я сделал в qtdesigner. я даже удалил весь контент, но все равно он дает то же самое пустое окно, без прозрачности ничего. также могу я узнать, почему мы не должны добавлять qmainwindow в составной виджет? (извините, я следил за тем, как сделать это из видео на YouTube)
QMainWindow задуман как окно верхнего уровня, а не как дочерний виджет. Вместо этого используйте простой QWidget. Если вы следуете учебнику из «Code First with Hala», то я настоятельно рекомендую вам полностью игнорировать его, так как он содержит множество ужасных предложений и плохих практик.
@musicamante omg, это действительно было местом, где я учился. Спасибо, просто с помощью mainwindow.show() все заработало. Есть ли у вас какие-либо предложения о том, кого еще я мог бы посмотреть, чтобы узнать больше? И как мне отметить тебя как ответчика?
Вы не можете помечать комментарии как ответы, и я не совсем понял, что вы изменили, чтобы это заработало. Тем не менее, я обычно не одобряю просмотр видеоуроков в качестве основного источника обучения (в основном потому, что большинство этих руководств созданы людьми, которые имеют лишь общий и поверхностный опыт в предмете, который они рассматривают при работе со сложными наборами инструментов, такими как Qt). Начните с следования действительным руководствам, таким как , перечисленные здесь .
@musicamante все, что мне нужно было сделать, это удалить все, что связано с виджетом в конце, и поставить mainwindow.show(), и он заработал, также большое спасибо
BlurWindow использует системные функции для установки фона окна верхнего уровня.
Ваша проблема в том, что вы применяете его не к тому виджету, который является дочерним виджетом, а не виджетом верхнего уровня. Верхний уровень не имеет установленного «стеклянного эффекта», поэтому в результате к нему не будет применено никакого эффекта.
Решение простое: применить эффект к окну верхнего уровня.
import sys
from PyQt5.QtWidgets import *
from PyQt5.uic import loadUi
from BlurWindow.blurWindow import blur
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
loadUi(r'D:\Workspace\Qt Designer\blur bg\blurtest.ui', self)
self.setStyleSheet("""
MainWindow {
background-color: rgba(0, 0, 0, 0);
}
""")
app = QApplication(sys.argv)
mainwindow = MainWindow()
widget = QtWidgets.QStackedWidget()
widget.addWidget(mainwindow)
widget.setFixedHeight(600)
widget.setFixedWidth(800)
blur(widget.winId()) # <---
widget.show()
sys.exit(app.exec_())
Обратите внимание, что:
loadUi()
вызовет исключение;
На вашем изображении вообще нет размытия.