PyQt5应用程序在所有肉桂/gnome工作区中可见

2024-04-28 09:52:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试让用pyqt5编写的应用程序在所有cinnamon/gnome虚拟工作空间中始终可见。
示例:'conky'
但是调查QDesktopApplicationQWindowQScreen似乎不是正确的方法。有地址吗?你知道吗

< > > >编辑< /St>:我已经在Keep a application window always on current desktop on linux and mac上看到了答案,它是C++答案,但我的问题是关于^ {< CD7>}。似乎方向是用一种C++包装器工作。你知道吗


Tags: 方法答案应用程序编辑示例on地址空间
1条回答
网友
1楼 · 发布于 2024-04-28 09:52:55

在下面的代码中,所有工作区上都显示了一个简单的文本框。 这可以使用python ewmh包将\u NET \u WM \u DESKTOP提示设置为0xffffff。你知道吗

"""
  example.py

  simple widget on bottom level visible in all workspaces
"""


import sys
from PyQt5 import QtWidgets
from PyQt5 import QtCore
from ewmh import EWMH


class Panel(QtWidgets.QWidget):
    """ main panel """

    def __init__(self):
        super(Panel, self).__init__()

        # panel size and position
        self.setFixedSize(300, 200)                     # width, height
        self.move(100, 100)                             # x, y

        # panel flags
        flags = QtCore.Qt.FramelessWindowHint           # no border and no title bar
        flags |= QtCore.Qt.WindowStaysOnBottomHint      # always on bottom level
        flags |= QtCore.Qt.Tool                         # no icon on taskbar
        self.setWindowFlags(flags)

        # panel style
        self.setWindowOpacity(0.8)                      # 0=transparent; 1=opaque
        self.setStyleSheet("background-color:#334455;padding: 0;margin: 0;")

        # text label
        txt = QtWidgets.QLabel(self)
        txt.setAlignment(QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter)
        txt.setStyleSheet("background:transparent;color:#000000;font:40px;padding:0;margin:0;")
        txt.setText('Hello world!')

        # vertical layout
        v_layout = QtWidgets.QVBoxLayout()
        v_layout.setContentsMargins(2, 2, 2, 2)
        v_layout.setSpacing(0)
        v_layout.addWidget(txt)
        self.setLayout(v_layout)

        # show the panel
        self.show()

        # show the panel in all workspaces
        # (taken from ewmh documentation)
        ewmh = EWMH()
        all_wins = ewmh.getClientList()
        wins = filter(lambda w: w.get_wm_class()[1] == 'example.py', all_wins)
        for w in wins:
            ewmh.setWmDesktop(w, 0xffffffff)
        ewmh.display.flush()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    p = Panel()
    sys.exit(app.exec_())

相关问题 更多 >