#python #user-interface #tkinter #tk
#python #пользовательский интерфейс #tkinter #tk
Вопрос:
В tkinter можно создать окно верхнего уровня и сделать его прозрачным, используя следующий код:
self._window = tkinter.Toplevel(self._tk_master)
self._window.wait_visibility()
self._window.wm_attributes('-alpha', 0.4)
self._canvas = tkinter.Canvas(self._window, width=self._width, height=self._height)
self._canvas.pack()
Теперь мой вопрос в том, как создать непрозрачный прямоугольник с черным фоном в новом прозрачном окне?
Я попытался просто создать прямоугольник и установить «заливку» на черный, но прямоугольник, похоже, наследует прозрачность окна:
self._background_rectangle = self._canvas.create_rectangle(
0,
0,
self._width,
self._height,
fill="black")
Я попытался создать изображение с помощью RGBA и установить прозрачность, но, похоже, это не влияет на отображаемый пользовательский интерфейс:
alpha = 0.99
fill = tk_master.winfo_rgb(fill) (int(alpha * 255),)
image_object = PIL.Image.new("RGBA", (width, height), fill)
image_object = PIL.ImageTk.PhotoImage(image_object)
self._canvas.create_image(x, y, image=image_object, anchor=tkinter.NW)
Я также взял изображение, содержащее только черный фон, и попытался добавить его, но изображение все равно не отображается!
image_object = PIL.Image.open(image_with_only_black_background)
image_object.resize((width, height), PIL.Image.ANTIALIAS)
image_object = PIL.ImageTk.PhotoImage(image_object)
self._canvas.create_image(x, y, image=image_object, anchor=tkinter.NW)
Кто-нибудь знает, как это решить? Или что я делаю не так?
Спасибо!
Комментарии:
1. Как только окно становится прозрачным, все, что с ним, также
alpha
применяется.2. Просто чтобы уточнить, вы создаете окно с прозрачным фоном, и все в окне также должно быть прозрачным?
3. Под прозрачным фоном, если вы имеете в виду использование
-alpha
, то да. Или, если вы имели в виду использованиеcanvas.create_image()
then no, только изображение будет иметь прозрачный фон.4. Большое вам спасибо!
5. Я бы подождал чужого мнения по этой теме, чтобы быть в безопасности.