如何从 gnome 面板 QML PyQt5 隐藏正在运行的应用程序图标

如何从 gnome 面板 QML PyQt5 隐藏正在运行的应用程序图标

我正在 gnome 中使用类似 conky 的小部件管理器。我只想隐藏我的 ap 应用程序图标(显示所有其他正在运行的应用程序图标),使其不显示在正在运行的应用程序中,或者从此处在此处输入图片描述

这是我的 qml 文件

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.12

Window {
    id:window
    visible: true
    width: 500
    flags: Qt.AlignLeft
    height: 375
    color: "transparent"
    title: qsTr("Nidgets")
    Timer{
        interval:100
        running: true
        repeat: true
        onTriggered: {
            time.text = Qt.formatDateTime(new Date(), "hh:mm A")
            date.text = Qt.formatDateTime(new Date(), "yyyy MMMM dd")
        }
    }

    Item {
        id: element1
        x: 0
        y: 0
        width: 200
        anchors.fill: parent
        height: 200
        focus: true
        Keys.onPressed: {
            if ((event.key === Qt.Key_F11) && (event.modifiers & Qt.ControlModifier)){
                if(window.flags == Qt.FramelessWindowHint)
                    window.flags = 0
                else
                    window.flags = Qt.FramelessWindowHint
            }
        }

        Text {
            id: date
            x: 310
            y: 205
            color: "#ffffff"
            text: Qt.formatDateTime(new Date(), "yyyy MMMM dd")
            font.pixelSize: 24
        }

        Text {
            id: time
            x: 74
            y: 86
            color: "#ffffff"
            anchors.centerIn: parent
            text: Qt.formatDateTime(new Date(), "hh:mm A")
            anchors.verticalCenterOffset: -45
            anchors.horizontalCenterOffset: 35
            font.pointSize: 75

        }


    }
}

我的 main.py 文件

import sys
from PyQt5.QtCore import QObject, QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQuick import QQuickView
from PyQt5.QtQml import QQmlApplicationEngine
from threading import Thread
import os
import importlib

if __name__ == '__main__':
    myApp = QApplication(sys.argv)

    engine = QQmlApplicationEngine()
    context = engine.rootContext()
    context.setContextProperty("main", engine)

    engine.load('main.qml')

    win = engine.rootObjects()[0]
    win.show()

    sys.exit(myApp.exec_())

答案1

显然,没有简单的方法可以提供给用户。最终只能将 _NET_WM_STATE_SKIP_TASKBAR 分配给窗口。

在 Askubuntu 上在窗口创建后,可以从外部更改窗口属性。使用魔鬼派将系统地隐藏符合特定规则的窗口。可以使用 从任务栏隐藏特定窗口wmctrl。例如,这可以在包装器启动脚本中完成。

更好的方法是从创建窗口的应用程序代码中设置窗口状态。对于 Python,它将归结为一个语句,例如window.set_property("skip-taskbar-hint", True)GTK。请参阅此处获取一些提示:https://stackoverflow.com/questions/22256507/how-to-make-a-program-skip-the-task-bar-task-list-in-gnu-linux

答案2

请检查该通用解决方案是否适合您的特定应用程序。

做:

xprop | grep "CLASS"

并单击要从任务栏中删除的窗口。

这将返回类似

WM_CLASS(STRING) = "name", "name"

安装 wmctrl

sudo apt install wmctrl

根据您的喜好,制作程序启动脚本或运行一次:

wmctrl -x -r name.name -b add,skip_taskbar

资料来源:

相关内容