rew Asked:2022-06-11 01:49:07 +0000 UTC2022-06-11 01:49:07 +0000 UTC 2022-06-11 01:49:07 +0000 UTC 在窗户上绘图 772 我想制作一个可以在窗口顶部绘制的 Python 程序。 换句话说,您可以这样做: 我了解如何跟踪鼠标的位置和点击。但我不知道如何在其他窗口上绘图(有人可以帮忙吗? python 1 个回答 Voted Best Answer eri 2022-06-12T18:11:20Z2022-06-12T18:11:20Z 您需要一个具有透明背景的全屏窗口。在其上创建一个画布并在其上绘图。 实现取决于操作系统和框架。 对于 Windows 上的 tk: import tkinter as tk root = tk.Tk() root.wait_visibility(root) root.wm_attributes("-fullscreen", 1) root.wm_attributes("-transparentcolor", root['bg']) frame = tk.Frame(root) frame.pack() canvas = tk.Canvas(frame, width=root.winfo_width(), height=root.winfo_height()) canvas.pack() canvas.create_rectangle(50, 25, 150, 75, fill="red") root.mainloop() 对于 linux,tk 不支持透明度。这是 Gtk-3 上的一个示例,带有绘图 import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk lines = [] pressed = False win = Gtk.Window() win.connect("destroy", Gtk.main_quit) eventbox = Gtk.EventBox() draw = Gtk.DrawingArea() def on_draw(area, ctx): ctx.set_line_width(1) ctx.set_source_rgb(1, 0, 0) ctx.fill() for line in lines: ctx.move_to(*line[0]) for point in line: ctx.line_to(*point) ctx.stroke() def on_down(widget, event): global pressed print('d',(event.x,event.y)) line = [(event.x,event.y)] lines.append(line) pressed = True def on_up(widget, event): global pressed print('u',(event.x,event.y)) pressed = False draw.queue_draw() def on_move(widget, event): global pressed print('m',(event.x,event.y), pressed) if pressed: lines[-1].append((event.x,event.y)) draw.queue_draw() draw.connect("draw", on_draw) eventbox.connect('button-press-event', on_down) eventbox.connect('button-release-event', on_up) eventbox.connect('motion-notify-event', on_move) eventbox.add(draw) screen = win.get_screen() visual = screen.get_rgba_visual() if visual and screen.is_composited(): win.set_visual(visual) win.set_app_paintable(True) win.add(eventbox) win.maximize() win.show_all() Gtk.main()
您需要一个具有透明背景的全屏窗口。在其上创建一个画布并在其上绘图。
实现取决于操作系统和框架。
对于 Windows 上的 tk:
对于 linux,tk 不支持透明度。这是 Gtk-3 上的一个示例,带有绘图