我正在开发像 gnome 中的 conky 这样的小部件管理器。我只想从正在运行的应用程序或从这里隐藏我的应用程序图标(显示所有其他正在运行的应用程序图标)
这是我的 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_())
显然没有向用户公开的简单方法。归结为将 _NET_WM_STATE_SKIP_TASKBAR 分配给窗口。
有关在创建窗口后从外部更改窗口属性的一些可能性,请参见Askubuntu 上的此处。使用devilspie将系统地隐藏与任务栏中某些规则匹配的窗口。可以使用
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 。请检查此通用解决方案是否适用于您的特定应用。
做:
并单击要从任务栏中删除的窗口。
这将返回类似
安装 wmctrl
根据您的喜好制作程序启动脚本或运行一次:
资料来源: