PyQt5如何實現窗口關閉淡出效果?

就是類似PC版QQ的登錄界面,點關閉按鈕時窗口是慢慢淡出的,這種效果如何實現,初學PyQt,請賜教


謝邀,剛好在寫文章,順便幫你寫了個Qt版本的例子,你可以將C++代碼改成python的

頭文件:

#ifndef CLOSEWIDGET_H
#define CLOSEWIDGET_H

#include &

class QPropertyAnimation;
class CloseWidget : public QWidget
{
Q_OBJECT

public:
CloseWidget(QWidget *parent = 0);

protected:
void closeEvent(QCloseEvent* e);

private:
QPropertyAnimation *animation;
};

#endif // CLOSEWIDGET_H

源文件:

#include &
#include &
#include "closewidget.h"

CloseWidget::CloseWidget(QWidget *parent)
: QWidget(parent)
{
animation = NULL;
}

void CloseWidget::closeEvent(QCloseEvent *e)
{
if (!animation)
{
animation = new QPropertyAnimation(this, "windowOpacity");
animation-&>setDuration(1000);
animation-&>setStartValue(1);
animation-&>setEndValue(0);

connect(animation, SIGNAL(finished()), this, SLOT(close()));
animation-&>start();
e-&>ignore();
}
}

整體思路:

1 重新closeEvent事件,在裡面截取關閉事件,使用ignore,禁止向父對象傳遞事件。

2 創建一個屬性動畫,屬性選擇透明度。

3 動畫結束後,關閉窗口。

歡迎關注我的專欄跟小豆君學Qt

微信公眾號:小豆君,只要關注,便可加入小豆君為大家創建的C++Qt交流群,方便討論學習。


沒試過,給兩個思路供參考

第一,如果只限於 Windows 平台,試試調用 API 函數 AnimateWindow

第二,用定時器逐漸修改窗口背景,參考這個:

How to set Qt window transparent?


from qtpy.QtCore import *
from qtpy.QtWidgets import *

class AnimationWidget(QWidget):

def __init__(self, parent=None):
super(QWidget, self).__init__(parent=parent)
self.animation = None

def closeEvent(self, event):
if self.animation is None:
self.animation = QPropertyAnimation(self, "windowOpacity")
self.animation.setDuration(2000)
self.animation.setStartValue(1)
self.animation.setEndValue(0)
self.animation.finished.connect(self.close)
self.animation.start()
event.ignore()

def main():
import sys
app = QApplication(sys.argv)
widget = AnimationWidget()
widget.show()
sys.exit(app.exec_())

if __name__ == "__main__":
main()

@小豆君的乾貨鋪 Python 版本來了


這一個似乎是用騰訊的界面庫實現的,可以考慮調用lua。也可以自己用Direct UI來製作。

純Qt似乎無法完成這麼高級的效果,Qt有動畫例子,能實現的動畫也就那些了。


推薦閱讀:

requests模塊的response.text與response.content有什麼區別?
Python如何輸出包含在對象中的中文字元?
vim怎麼匹配多個相同字元並替換成字元加數字遞增的形式?
如何避免無意識裝B?

TAG:Python | QtC開發框架 | PyQt |