tkinter - прямоугольник, скрытый под фоновым изображением - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь создать действительно простой HMI, отображать различные изображения и названия файлов и другую информацию в нижней строке с помощью tkinter. Я создал макет, добавил фоновое изображение, но нижний прямоугольник не виден.

Фоновое изображение накладывается на прямоугольник, как я могу заставить основное изображение позади всех других компонентов внутри холста? Черный прямоугольник должен быть виден в нижней части рисунка

from PIL import Image, ImageTk
from tkinter import Tk, BOTH, Canvas 
from tkinter.ttk import Frame, Label, Style

root = Tk()
root.title('Screen')

w = Canvas(root, width=800 , height=480)
w.pack()

back_ground = ImageTk.PhotoImage(Image.open("./icon/sync_background.bmp"))
back_ground_label = Label(image=back_ground, borderwidth=0)
back_ground_label.place(x=0,y=0)

w.create_rectangle(0, 400, 800, 480,outline="#000", fill="#000")
w.pack()

root.mainloop()

Cn

Ответы [ 2 ]

2 голосов
/ 15 апреля 2020

Ваше фоновое изображение размещается поверх холста, поэтому оно скрывает холст. Вы должны создать изображение, используя w.create_image(...) вместо:

from PIL import Image, ImageTk
from tkinter import Tk, BOTH, Canvas 

root = Tk()
root.title('Screen')

back_ground = ImageTk.PhotoImage(Image.open("./icon/sync_background.bmp"))

w = Canvas(root, width=800 , height=480)
w.pack()

w.create_image(0, 0, image=back_ground, anchor='nw')
w.create_rectangle(0, 400, 800, 480,outline="#000", fill="#000")

root.mainloop()
0 голосов
/ 15 апреля 2020

Вот что вы можете сделать:

from PIL import Image, ImageTk
from tkinter import Tk, BOTH, Canvas 
from tkinter.ttk import Frame, Label, Style

root = Tk()
root.title('Screen')

w = Canvas(root, width=800 , height=480)
w.pack()

back_ground = ImageTk.PhotoImage(Image.open("./icon/sync_background.bmp"))
back_ground_label = Label(image=back_ground, borderwidth=0)
back_ground_label.place(x=0,y=0)

rect = w.create_rectangle(0, 400, 800, 480,outline="#000", fill="#000")
w.tag_raise(rect)
w.pack()

root.mainloop()

Это создает объект "rect" и затем использует метод tag_raise, чтобы вывести его вперед.

Hope помогает! Ура! * * 1006

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