如何使用 QML 和 PyQt5 创建一个没有标题栏的小通知窗口

Posted

技术标签:

【中文标题】如何使用 QML 和 PyQt5 创建一个没有标题栏的小通知窗口【英文标题】:How to create a tiny no titlebar notification window using QML and PyQt5 【发布时间】:2019-10-11 17:06:46 【问题描述】:

我们如何使用 QML 创建一个没有标题栏的小通知窗口?例如,看图片。此通知似乎是由 GTK 创建的。

我们可以使用 PyQt5 和 QML 像这样创建吗

【问题讨论】:

您在寻找Notification 吗? doc.qt.io/QtApplicationManager/… 【参考方案1】:

QML 是一种非常灵活的语言,您几乎可以创建任何您想要的东西。在您的情况下,我会使用一些系统工具,因为它不是跨平台的并且可以按预期工作。但是你总是可以创建一些自定义窗口,例如:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.5
import Qt.labs.platform 1.1

Window 
    visible: true
    width: 400
    height: 100

    RowLayout 
        anchors.centerIn: parent
        Button 
            text: "systray message"
            onClicked: 
                systray.showMessage("title", "message", SystemTrayIcon.Warning, 2000)
            
        
        Button 
            text: "custom message"
            onClicked: 
                popup.show();
            
        
    

    SystemTrayIcon 
        id: systray
          visible: true
          icon.source: "qrc:/ok.png"
          icon.mask: false
    

    Window 
        id: popup
        flags: Qt.FramelessWindowHint
        x: Screen.width - 350
        y: Screen.height - 150
        width: 300
        height: 30
        Rectangle 
            anchors.fill: parent
            color: "black"
            Text 
                anchors.centerIn: parent
                text: "Some custom message"
                color: "white"
            
        
        Timer 
            id: timer
            interval: 2000;
            running: false;
            repeat: false
            onTriggered: popup.close()
        
        onVisibleChanged: 
            if(visible)
                timer.running = true;
        
    

【讨论】:

以上是关于如何使用 QML 和 PyQt5 创建一个没有标题栏的小通知窗口的主要内容,如果未能解决你的问题,请参考以下文章

Qt5 / PyQt5 : 带有 QML 前端和 Python 后端的自定义 QML 组件

PyQt5 与 QML

如何将 .qml 扩展名更改为 .ui 以在 pyqt5 应用程序中使用它

pyqt5 孩子使用 qml 文件访问

无法在 qml(PyQt5) 中导入 qtlottie

PyQt5 和 QML 中的嵌套 ListView