select_orc.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import tkinter as tk
  2. from PIL import ImageGrab, ImageTk
  3. import wanguo_config
  4. class RegionSelection:
  5. def __init__(self, root, screenshot):
  6. self.root = root
  7. self.start_x = None
  8. self.start_y = None
  9. self.end_x = None
  10. self.end_y = None
  11. self.rectangle = None
  12. # 创建截图显示窗口
  13. self.screenshot_window = tk.Toplevel(self.root)
  14. self.screenshot_window.attributes('-fullscreen', True)
  15. self.screenshot_window.attributes('-alpha', 0.3)
  16. self.screenshot_canvas = tk.Canvas(self.screenshot_window, bg="white")
  17. self.screenshot_canvas.pack(fill=tk.BOTH, expand=True)
  18. self.screenshot_photo = ImageTk.PhotoImage(screenshot)
  19. self.screenshot_canvas.create_image(0, 0, image=self.screenshot_photo, anchor=tk.NW)
  20. # 绑定鼠标事件
  21. self.screenshot_canvas.bind("<ButtonPress-1>", self.on_button_press)
  22. self.screenshot_canvas.bind("<B1-Motion>", self.on_button_motion)
  23. self.screenshot_canvas.bind("<ButtonRelease-1>", self.on_button_release)
  24. def on_button_press(self, event):
  25. self.start_x = event.x
  26. self.start_y = event.y
  27. def on_button_motion(self, event):
  28. if self.rectangle is not None:
  29. self.screenshot_canvas.delete(self.rectangle)
  30. self.end_x = event.x
  31. self.end_y = event.y
  32. self.rectangle = self.screenshot_canvas.create_rectangle(self.start_x, self.start_y, self.end_x, self.end_y, outline="red")
  33. def on_button_release(self, event):
  34. if self.rectangle is not None:
  35. self.screenshot_canvas.delete(self.rectangle)
  36. # 返回区域坐标(相对于全屏)
  37. x1 = min(self.start_x, self.end_x)
  38. y1 = min(self.start_y, self.end_y)
  39. x2 = max(self.start_x, self.end_x)
  40. y2 = max(self.start_y, self.end_y)
  41. # 转换为相对于屏幕左上角的坐标
  42. x1 += self.screenshot_window.winfo_rootx()
  43. y1 += self.screenshot_window.winfo_rooty()
  44. x2 += self.screenshot_window.winfo_rootx()
  45. y2 += self.screenshot_window.winfo_rooty()
  46. # 返回具体坐标
  47. print("选择的区域坐标:", (x1, y1, x2, y2))
  48. wanguo_config.g_region = (x1, y1, x2, y2)
  49. # 关闭截图显示窗口
  50. self.screenshot_window.destroy()
  51. if __name__ == "__main__":
  52. # 初始化Tkinter窗口
  53. root = tk.Tk()
  54. # 获取全屏截图
  55. screenshot = ImageGrab.grab()
  56. # 创建区域选择对象
  57. region_selection = RegionSelection(root, screenshot)
  58. # 运行Tkinter窗口主
  59. root.mainloop()