2017-12-05 4 views
1

나중에 비디오로 변환하기 위해 tkinter 화면을 파일에 저장하려고합니다.tkinter 화면에서 ImageGrab 수행

ImageGrab을 사용하기위한 캔버스의 올바른 위치를 가져올 수 없습니다.

내 관련 수입은 : 내가 얻을하는 방법을 모른다

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

:

import tkinter 
import pyscreenshot as ImageGrab 

나는 (화면을 그린 후)를 사용하여 화면을 저장하는 것을 시도하고있다 "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) 
+1

는'canvas.winfo_geometry()'와 [다른 시도 결과 화면에 부모의 내부 캔버스 '위치를 표시 winfo_xxx 방법] (http://effbot.org/tkinterbook/widget.htm) – furas

답변

1

당신은 winfo_x(), winfo_y() 같은 방법을 얻을 수있다 상위 위젯 내부에 위치 (기본 창일 필요는 없음) winfo_rootx(), winfo_rooty()

Effbot.org는 : Basic Widget Methods

코드 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 
+0

매력처럼 작동합니다. –

관련 문제