затемнить все окно tkinter - PullRequest
1 голос
/ 07 мая 2020

Я программирую игру на дипломном проекте в школе. После того, как менеджер закроет игру, я хочу, чтобы у других пользователей появилось всплывающее окно с сообщением о завершении игры и кнопка, на которую можно нажать, чтобы продолжить. Я хочу, чтобы все окно целое (со всеми виджетами) стало темнее (не полностью черным, а темнее). Все, кроме всплывающего окна и кнопки «продолжить»

Enyone знает, что я могу сделать? Я искал в Inte rnet и ничего не нашел: /

1 Ответ

0 голосов
/ 08 мая 2020

Невозможно использовать ImageGrab на linux, вот мое решение:

import tkinter as tk
import numpy as np
import time
import pyscreenshot as ImageGrab
from PIL import Image, ImageTk

def grab(widget):
    box = (widget.winfo_rootx(), widget.winfo_rooty(), widget.winfo_rootx()+widget.winfo_width(), widget.winfo_rooty()+widget.winfo_height())
    grab = ImageGrab.grab(bbox=box)
    return grab

def darken(widget):
    widget.overlay = ImageTk.PhotoImage(Image.fromarray(np.asanyarray(grab(widget))//2))
    cvs = tk.Canvas(widget, width=widget.winfo_width(), height=widget.winfo_height())
    cvs.place(x=0,y=0)
    cvs.create_image(0, 0, anchor='nw', image=widget.overlay)
    return cvs

root = tk.Tk()

def apply_dark():
    cvs = darken(root)
    b = tk.Button(root, text='Ok')
    def d():
        cvs.destroy()
        b.destroy()
    b.config(command=d)
    b.place(x=50, y=10)

tk.Label(root, text='Label1').grid(row=0, column=0)
tk.Label(root, text='Label2').grid(row=0, column=1)
tk.Button(root, text='Button1').grid(row=1, column=0)
tk.Button(root, text='Darken', command=apply_dark).grid(row=1, column=1)

root.mainloop()

Поиграйте с этим кодом. Конечно, на самом деле это всего лишь быстрая уловка (ненадежная, неэффективная), но все же - у меня работает. Надеюсь, это поможет!

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