相关文章推荐
拉风的蟠桃  ·  react中使用TS将一个string类型的 ...·  10 月前    · 
爱喝酒的手电筒  ·  将一个uint8变量写入两个字节?·  1 年前    · 
冷静的树叶  ·  TypeScript ...·  1 年前    · 
聪明伶俐的人字拖  ·  selenium登录淘宝验证-掘金·  1 年前    · 
有情有义的沙滩裤  ·  学习朴素贝叶斯算法的5个简单步骤_第3关:朴 ...·  1 年前    · 
Code  ›  如何使用python在任何窗口上绘图?开发者社区
python event root
https://cloud.tencent.com/developer/ask/sof/108244079
干练的水煮肉
6 月前
首页
学习
活动
专区
工具
TVP 最新优惠活动
返回腾讯云官网
提问

问 如何使用python在任何窗口上绘图?

Stack Overflow用户
提问于 2020-04-01 09:27:00
EN

我正在做一个教程来向别人解释事情。在这个教程中,我正在尝试制作一个python程序(类似于画图应用程序)。

我们都用在窗户上。用钢笔,刷子和画形状,如方形,圆圈,并有一个选项的彩色皮克选择颜色绘制。

我已经尝试使用 from tkinter import choosecolor 在python中创建类似于绘图的软件。

但是这样的话,它只能在一张平纹画布上画。

但是我不想在画布上画画,我想在制作教程的时候在直播屏幕上画它。

示例图像如下所示

​

​

我试着做一个像这样的gui窗口来选择颜色和笔工具在屏幕上画画(eg.desktop,window等)。

​

​

有人能给我一些建议,如何在我的桌面屏幕或任何窗口上这样画。

1 5.3K 0 票数 3
EN
python
drawing

回答 1

Stack Overflow用户

发布于 2020-04-01 12:02:39

虽然在你的视频中,似乎“直接在屏幕上画画".Actually,但我认为它没有。

有一个简单的“在屏幕上绘图”的例子,您可以修改它:

代码语言: javascript
复制
import tkinter as tk
from PIL import ImageGrab,ImageTk
import ctypes
ctypes.windll.shcore.SetProcessDpiAwareness(2) # windows 10
class ToolWin(tk.Toplevel):
    def __init__(self):
        tk.Toplevel.__init__(self)
        self._offsetx = 0
        self._offsety = 0
        self.wm_attributes('-topmost',1)
        self.penSelect = tk.BooleanVar()
        self.overrideredirect(1)
        self.geometry('200x200')
        self.penModeId = None
        self.bind('<ButtonPress-1>',self.clickTool) 
        self.bind('<B1-Motion>',self.moveTool) # bind move event
        draw = tk.Checkbutton(self,text="Pen",command=self.penDraw,variable=self.penSelect)
        draw.pack()
        cancel = tk.Button(self,text="Quit",command=root.destroy)
        cancel.pack()
    def moveTool(self,event):
        self.geometry("200x200+{}+{}".format(self.winfo_pointerx()-self._offsetx,self.winfo_pointery()-self._offsety))
    def clickTool(self,event):
        self._offsetx = event.x
        self._offsety = event.y
    def penDraw(self):
        if self.penSelect.get():
            self.penModeId = root.bind("<B1-Motion>",Draw)
        else:
            root.unbind('<B1-Motion>',self.penModeId)
def Draw(event):# r = 3
    fullCanvas.create_oval(event.x-3,event.y-3,event.x+3,event.y+3,fill="black")
def showTool(): # the small tool window
    toolWin = ToolWin()
    toolWin.mainloop()
root = tk.Tk()
root.state('zoomed')
root.overrideredirect(1)
fullCanvas = tk.Canvas(root)
background = ImageTk.PhotoImage(ImageGrab.grab(all_screens=True)) # show the background,make it "draw on the screen".
 
推荐文章
拉风的蟠桃  ·  react中使用TS将一个string类型的字符串('域名资产:第2行,负责人default不存在\n主机资产:第2行,负责人default不存在\n主机资产:第2行)根据字符串中的换行符进行换行展示
10 月前
爱喝酒的手电筒  ·  将一个uint8变量写入两个字节?
1 年前
冷静的树叶  ·  TypeScript 合并两个对象类型_编程语言-CSDN问答
1 年前
聪明伶俐的人字拖  ·  selenium登录淘宝验证-掘金
1 年前
有情有义的沙滩裤  ·  学习朴素贝叶斯算法的5个简单步骤_第3关:朴素贝叶斯分类算法流程_DataCastle的博客-CSDN博客
1 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号