Python tkinter, снимок с pyscreenshot, странно открывающий то же приложение, и как изменить размер области снимка вместе с сохранением файла? - PullRequest
0 голосов
/ 20 сентября 2019

Вот текущий код:

from tkinter import *
import glob
import os
from PIL import Image, ImageTk, ImageGrab
import tkinter as tk
import pyautogui
import datetime
import time
from pyscreenshot import grab
#date & time
now = datetime.datetime.now()

root = tk.Tk()
root.title("SIGN OFF")
root.minsize(840, 400)

# Frames
left_frame = tk.Frame()
right_frame = tk.Frame()

left_frame.pack(side="left", fill="both", expand=True)
right_frame.pack(side="right", fill="both", expand=True)

# Create a Tkinter variable
tkvar = tk.StringVar(root)

# Directory
directory = "C:/Users/label/Desktop/Sign off Project/sign off img"
choices = glob.glob(os.path.join(directory, "*.jpg"))
tkvar.set('...To Sign Off...') # set the default option

# On change dropdown callback.
def change_dropdown(*args):
    """ Updates label2 image. """
    imgpath = tkvar.get()
    img = Image.open(imgpath)
    img = img.resize((540,440))
    photo = ImageTk.PhotoImage(img)
    label2.image = photo
    label2.configure(image=photo)



#Seperating widgets
choose_label = tk.Label(left_frame, text="Choose your sign off here:")
popupMenu = tk.OptionMenu(left_frame, tkvar, *choices)
display_label = label2 = tk.Label(left_frame, image=None)
open_button = tk.Button(left_frame, text="Open", command=change_dropdown)

choose_label.grid(row=1, column=1)
popupMenu.grid(row=2, column=1)
display_label.grid(row=3, column=1)
open_button.grid(row=4, column=1)





def user():
    tk.Label(right_frame, text= "User: ", font = 'Helvetica 18 bold').grid(column = 1, row = 0, sticky = W)
    user_input = os.getlogin()
    tk.Label(right_frame, text = user_input, font='Helvetica 18 bold').grid(column = 1, row = 0, sticky = N)


user()


def var_states():
    text_file = open("logfile.txt", "a")
    text_file.write("TIME: %s, USER: %s, One %d, Two %d, Three %d, Four %d, Five %d, Six %d, Seven %d, Eight %d, Nine %d, Ten %d, Eleven %d, Twelve %d\n" % (now,os.getlogin(), var1.get(), var2.get(), var3.get(), var4.get(), var5.get(), var6.get(), var7.get(), var8.get(), var9.get(), var10.get(), var11.get(), var12.get()))
    text_file.close()

#checkboxes
var1 = IntVar()
var2 = IntVar()
var3 = IntVar()
var4 = IntVar()
var5 = IntVar()
var6 = IntVar()
var7 = IntVar()
var8 = IntVar()
var9 = IntVar()
var10 = IntVar()
var11 = IntVar()
var12 = IntVar()

tk.Checkbutton(right_frame, text="Ingredients present in full (any allergens in bold with allergen warning if necessary)", variable=var1).grid(column = 1, row = 1, sticky = W)
tk.Checkbutton(right_frame, text="May Contain Statement.", variable=var2).grid(column = 1, row = 2, sticky = W)
tk.Checkbutton(right_frame, text="Cocoa Content (%).", variable=var3).grid(column = 1, row = 3, sticky = W)
tk.Checkbutton(right_frame, text="Vegetable fat in addition to Cocoa butter", variable=var4).grid(column = 1, row = 4, sticky = W)
tk.Checkbutton(right_frame, text="Instructions for Use.", variable=var5).grid(column = 1, row = 5, sticky = W)
tk.Checkbutton(right_frame, text="Additional warning statements (pitt/stone, hyperactivity etc)", variable=var6).grid(column = 1, row = 5, sticky = W)
tk.Checkbutton(right_frame, text="Nutritional Information Visible", variable=var7).grid(column = 1, row = 7, sticky = W)
tk.Checkbutton(right_frame, text="Storage Conditions", variable=var8).grid(column = 1, row = 8, sticky = W)
tk.Checkbutton(right_frame, text="Best Before & Batch Information", variable=var9).grid(column = 1, row = 9, sticky = W)
tk.Checkbutton(right_frame, text="Net Weight & Correct Font Size.", variable=var10).grid(column = 1, row = 10, sticky = W)
tk.Checkbutton(right_frame, text="Barcode - Inner", variable=var11).grid(column = 1, row = 11, sticky = W)
tk.Checkbutton(right_frame, text="Address & contact details correct", variable=var12).grid(column = 1, row = 12, sticky = W)




def save():
    img = grab(bbox=(100,200,300,400))
    img.show()


    var_states()


tk.Button(right_frame, text = "Save", command = save).grid(column = 1, row = 13, sticky = W)


root.mainloop()

Моя текущая проблема заключается в следующем:

  • Когда я нажимаю сохранить, мне нужно сделать снимок всего приложения и магазинафайл img.В настоящее время, когда я нажимаю «Сохранить», он открывает тот же самый экран (не знаю, зачем он это делает ..), если я закрываю его, он делает снимок первого приложения и открывает IMG.Я не уверен, как сделать снимок всего экрана приложения, а не маленького кадра, каким он является в настоящее время, какие значения я использую?И как мне сохранить файл в определенном каталоге?

ОБНОВЛЕНИЕ

def save():
    pyautogui.hotkey('Alt')
    pyautogui.hotkey('Printscreen')
    img = (ImageGrab.grabclipboard())
    img.show()
    img.save('paste.jpg', 'JPEG')

Пробовал использовать это, но, вероятно, нужна альтернатива этому коду,как pyautogui не работает хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...