小编GGG*_*GGG的帖子

用Qt在屏幕上绘制透明图像

我正在尝试在整个屏幕上绘制具有透明背景的图像。我对 Xlib 做了类似的事情,但我想我应该尝试 Qt,这样我的程序就可以在 X11 之外的不同环境中运行。在做出承诺之前,老实说,我只是在互联网上搜索试图找到一个可行的示例,但失败了。

所以我有一个想要覆盖在屏幕上的坐标图像。该图像是具有透明背景的PNG。这是我想要看到的图片,带有坐标的桌面: 在此输入图像描述

这是我的 PyQt6 代码,它全屏绘制图像,但遗憾的是你看不到它,它有黑色背景:

import sys
from PyQt6.QtCore import Qt
from PyQt6.QtGui import QImage
from PyQt6.QtWidgets import QApplication, QMainWindow

from PyQt6.QtGui import QPainter

class Img(QMainWindow):
    def __init__(self, img_path, parent=None):
        super().__init__(parent)
        self.qimg = QImage(img_path)
        self.setStyleSheet('QMainWindow {background:transparent}')
        self.setWindowFlags(
            Qt.WindowType.WindowStaysOnTopHint |
            Qt.WindowType.FramelessWindowHint |
            Qt.WindowType.WindowTransparentForInput
        )
        self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)

    def paintEvent(self, qpaint_event):
        painter = QPainter(self)
        rect = qpaint_event.rect()
        painter.drawImage(rect, self.qimg)
        self.showFullScreen()


if __name__ == "__main__":
    app = QApplication(sys.argv)
    img_path = 'coords.png'
    window = Img(img_path)
    window.show()
    sys.exit(app.exec())
Run Code Online (Sandbox Code Playgroud)

答案不需要是 PyQt6,也许是 PyQt5 或用 …

qt pyqt pyqt5 pyqt6

9
推荐指数
1
解决办法
1461
查看次数

Jinja2 多行替换的每一行都有缩进

假设我有一个模板:

<tag>
    {{ x }}
</tag>
Run Code Online (Sandbox Code Playgroud)

我将 x 设置为:

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

我得到:

<tag>
    1
2
3
4
5
</tag>
Run Code Online (Sandbox Code Playgroud)

我应该如何更改模板以获得:

<tag>
    1
    2
    3
    4
    5
</tag>
Run Code Online (Sandbox Code Playgroud)

谢谢。

jinja2

5
推荐指数
0
解决办法
1820
查看次数

在 Go 中前台处理信号

我想在后台监听操作系统信号,但在前台处理它。

这是示例代码。主循环无限期地每秒打印“boop”。但是,当收到中断信号时,处理程序会打印“Terminate Slow...”,并等待五秒钟,然后再终止程序。

package main

import (
    "fmt"
    "os"
    "os/signal"
    "time"
)

func main() {
    c := make(chan os.Signal)
    signal.Notify(c, os.Interrupt)
    go func() {
        <-c
        fmt.Println("Terminating slowly...")
        time.Sleep(time.Duration(5)*time.Second)
        os.Exit(0)
    }()

    for {
        fmt.Println("boop")
        time.Sleep(time.Duration(1)*time.Second)
    }
}
Run Code Online (Sandbox Code Playgroud)

当信号被处理时,我希望其他一切都被阻止。但目前在缓慢终止的五秒内,它不断打印“boop”。

我明白了:

boop
boop
^CTerminating slowly...
boop
boop
boop
boop
boop
Run Code Online (Sandbox Code Playgroud)

我想要这个:

boop
boop
^CTerminating slowly...
Run Code Online (Sandbox Code Playgroud)

真正的程序是一个基于堆栈的语言解释器,用户可以在终止时运行某些内容,但目前主循环可以同时更改堆栈。

signals foreground go

1
推荐指数
1
解决办法
597
查看次数

标签 统计

foreground ×1

go ×1

jinja2 ×1

pyqt ×1

pyqt5 ×1

pyqt6 ×1

qt ×1

signals ×1