如何从python中的小部件在任何窗口上绘制
Posted
技术标签:
【中文标题】如何从python中的小部件在任何窗口上绘制【英文标题】:how to draw on any window from a widget in python 【发布时间】:2020-07-02 22:18:53 【问题描述】:我是 python 新手,我想在 python 中创建一个脚本,它可以让我在我的桌面或任何窗口(如网络浏览器等)上绘图或绘画.....
谁能告诉我我可以使用python中的哪个库来实现这个目标。
因为我想直接在桌面屏幕上绘制,而不是在任何画布或特定(用于绘图的单独窗口)中绘制
来自 tkinter.colorchooser 或其他。
示例图像如下所示,这就是我想要的。
我怎样才能得到这样的小部件,只有颜色选项和默认笔来绘制。
【问题讨论】:
寻求图书馆推荐对于 *** 来说是题外话。 【参考方案1】:使用python内置库Tkinter。
from tkinter import *
from tkinter.colorchooser import askcolor
class Paint(object):
DEFAULT_PEN_SIZE = 5.0
DEFAULT_COLOR = 'black'
def __init__(self):
self.root = Tk()
self.pen_button = Button(self.root, text='pen', command=self.use_pen)
self.pen_button.grid(row=0, column=0)
self.brush_button = Button(self.root, text='brush', command=self.use_brush)
self.brush_button.grid(row=0, column=1)
self.color_button = Button(self.root, text='color', command=self.choose_color)
self.color_button.grid(row=0, column=2)
self.eraser_button = Button(self.root, text='eraser', command=self.use_eraser)
self.eraser_button.grid(row=0, column=3)
self.choose_size_button = Scale(self.root, from_=1, to=10, orient=HORIZONTAL)
self.choose_size_button.grid(row=0, column=4)
self.c = Canvas(self.root, bg='white', width=600, height=600)
self.c.grid(row=1, columnspan=5)
self.setup()
self.root.mainloop()
def setup(self):
self.old_x = None
self.old_y = None
self.line_width = self.choose_size_button.get()
self.color = self.DEFAULT_COLOR
self.eraser_on = False
self.active_button = self.pen_button
self.c.bind('<B1-Motion>', self.paint)
self.c.bind('<ButtonRelease-1>', self.reset)
def use_pen(self):
self.activate_button(self.pen_button)
def use_brush(self):
self.activate_button(self.brush_button)
def choose_color(self):
self.eraser_on = False
self.color = askcolor(color=self.color)[1]
def use_eraser(self):
self.activate_button(self.eraser_button, eraser_mode=True)
def activate_button(self, some_button, eraser_mode=False):
self.active_button.config(relief=RAISED)
some_button.config(relief=SUNKEN)
self.active_button = some_button
self.eraser_on = eraser_mode
def paint(self, event):
self.line_width = self.choose_size_button.get()
paint_color = 'white' if self.eraser_on else self.color
if self.old_x and self.old_y:
self.c.create_line(self.old_x, self.old_y, event.x, event.y,
width=self.line_width, fill=paint_color,
capstyle=ROUND, smooth=TRUE, splinesteps=36)
self.old_x = event.x
self.old_y = event.y
def reset(self, event):
self.old_x, self.old_y = None, None
if __name__ == '__main__':
Paint()
【讨论】:
这很好并且有效。但我不想在我想在任何桌面窗口或浏览器等上绘制的窗口(tkinter)中绘制它。 那是你想让 Python 进行全屏截图并且你想在上面画画。对吗? 不,我不想截屏,我想在桌面上实时绘制。就像您在某些屏幕录制软件中录制屏幕时所做的那样。作为教程。 除了 tkinter 创建的窗口外,您不能使用 tkinter 在任何窗口上绘图。这个答案不符合问题的要求。 @InfinityTM 我可以使窗口透明和全屏来实现我想要的但我不想要那个笔、橡皮擦等按钮我想要一个带有默认笔的直接颜色选择框来绘制它(图片已更新)以上是关于如何从python中的小部件在任何窗口上绘制的主要内容,如果未能解决你的问题,请参考以下文章
Qt 如何从 QVector 中的数据创建位图并将其显示在小部件上?