python 框选得到所选的坐标轴


```python
import tkinter as tk
import ctypes
class TransparentSelectionWindow:
    def __init__(self):
        self.root = tk.Tk()
        self.root.withdraw()  # 隐藏主窗口

        # 创建透明窗口
        self.overlay = tk.Toplevel()
        self.overlay.attributes("-topmost", True)
        self.overlay.attributes("-fullscreen", True)
        self.overlay.attributes("-alpha", 0.5)  # 设置窗口透明度
        self.overlay.config(bg='gray')

        # 画布设置
        self.canvas = tk.Canvas(self.overlay, bg='gray', cursor='cross', bd=0, highlightthickness=0)
        self.canvas.pack(fill='both', expand=True)
        self.start_x = None
        self.start_y = None
        self.rect = None
        self.region = None
        self.overlay.bind('<ButtonPress-1>', self.on_button_press)
        self.overlay.bind('<B1-Motion>', self.on_mouse_drag)
        self.overlay.bind('<ButtonRelease-1>', self.on_button_release)

        # 使用 ctypes 设置窗口样式以实现透明
        self.set_transparent()

    def set_transparent(self):
        # 使窗口完全透明
        hwnd = self.overlay.winfo_id()
        # WS_EX_LAYERED 是设置窗口样式的标志之一
        ws_ex_layered = 0x00080000
        ctypes.windll.user32.SetWindowLongW(hwnd, -20, ctypes.windll.user32.GetWindowLongW(hwnd, -20) | ws_ex_layered)
        # 设置窗口透明度
        ctypes.windll.user32.SetLayeredWindowAttributes(hwnd, 0, 128, 0x00000002)

    def on_button_press(self, event):
        self.start_x = self.canvas.canvasx(event.x)
        self.start_y = self.canvas.canvasy(event.y)
        if self.rect:
            self.canvas.delete(self.rect)
        self.rect = self.canvas.create_rectangle(self.start_x, self.start_y, self.start_x, self.start_y, outline='red')

    def on_mouse_drag(self, event):
        cur_x = self.canvas.canvasx(event.x)
        cur_y = self.canvas.canvasy(event.y)
        self.canvas.coords(self.rect, self.start_x, self.start_y, cur_x, cur_y)

    def on_button_release(self, event):
        end_x = self.canvas.canvasx(event.x)
        end_y = self.canvas.canvasy(event.y)
        self.region = (int(min(self.start_x, end_x)), int(min(self.start_y, end_y)), int(max(self.start_x, end_x)), int(max(self.start_y, end_y)))
        print(f"框选坐标:左上角 ({self.region[0]}, {self.region[1]}),右下角 ({self.region[2]}, {self.region[3]})")
        self.overlay.destroy()

    def run(self):
        self.overlay.mainloop()
        return self.region

if __name__ == "__main__":
    print("请选择屏幕区域...")
    screen_capture = TransparentSelectionWindow()
    region = screen_capture.run()
    if region:
        print(f"选择的区域坐标:{region}")
    else:
        print("没有选择任何区域。")



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值