簡體   English   中英

在 tkinter 屏幕上執行 ImageGrab

[英]Performing ImageGrab on tkinter Screen

我正在嘗試將 tkinter 屏幕保存到文件(稍后轉換為視頻)。

我無法獲得使用 ImageGrab 的畫布的正確位置。

我的相關進口是:

import tkinter
import pyscreenshot as ImageGrab 

我正在嘗試使用(繪制屏幕后)保存屏幕:

grab = ImageGrab.grab(bbox=canvas.bbox())
ImageGrab.grab_to_file(fileName,grab)

我不知道如何獲取使用“ImageGrab.grab”的畫布位置。

有沒有辦法獲取整個畫布的邊界框,以便以后使用ImageGrab存儲屏幕截圖?

---編輯---------------------------------------------- --------------------

解決方案:

box = (canvas.winfo_rootx(),canvas.winfo_rooty(),canvas.winfo_rootx()+canvas.winfo_width(),canvas.winfo_rooty() + canvas.winfo_height())
grab = ImageGrab.grab(bbox = box)
grab.save(file_path)

你有像winfo_x()winfo_y()來獲取父小部件內的位置(它不必是主窗口),以及winfo_rootx()winfo_rooty()來獲取屏幕上的位置。

Effbot.org:基本小部件方法

代碼在屏幕上和父Frame內顯示畫布的位置

import tkinter as tk

def callback():
    print('  root.geometry:', root.winfo_geometry())
    print('canvas.geometry:', canvas.winfo_geometry())
    print('canvas.width :', canvas.winfo_width())
    print('canvas.height:', canvas.winfo_height())
    print('canvas.x:', canvas.winfo_x())
    print('canvas.y:', canvas.winfo_y())
    print('canvas.rootx:', canvas.winfo_rootx())
    print('canvas.rooty:', canvas.winfo_rooty())

root = tk.Tk()

tk.Label(root, text='SOME WIDGETS IN ROOT').pack()

frame = tk.Frame(root)
frame.pack()

tk.Label(frame, text='SOME WIDGETS IN FRAME').pack()

canvas = tk.Canvas(frame, bg='green')
canvas.pack()

print('\n--- before mainloop start---\n')
callback()

print('\n--- after mainloop start ---\n')
root.after(100, callback)

root.mainloop()

示例結果

--- before mainloop start ---

  root.geometry: 1x1+0+0
canvas.geometry: 1x1+0+0
canvas.width : 1
canvas.height: 1
canvas.x: 0
canvas.y: 0
canvas.rootx: 0
canvas.rooty: 0

--- after mainloop start ---

  root.geometry: 380x303+770+462
canvas.geometry: 380x267+0+18
canvas.width : 380
canvas.height: 267
canvas.x: 0
canvas.y: 18
canvas.rootx: 770
canvas.rooty: 498

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM