我正在尝试在整个屏幕上绘制具有透明背景的图像。我对 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 或用 …
假设我有一个模板:
<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)
?
谢谢。
我想在后台监听操作系统信号,但在前台处理它。
这是示例代码。主循环无限期地每秒打印“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)
真正的程序是一个基于堆栈的语言解释器,用户可以在终止时运行某些内容,但目前主循环可以同时更改堆栈。