Я пытаюсь скрыть некоторые метки в своем коде tkinter.
Я загружаю изображения, а затем применяю некоторую технику предварительной обработки.
Дело в том, что у меня есть три метки, которые были добавлены в виджет с именем "miframe", и все они находятся в одинаковых координатах:
labelmaduro = Label(miframe, image=ruta_maduro).place(x=25, y=60)
labelpinton = Label(miframe, image=ruta_pinton).place(x=25, y=60)
labelverde = Label(miframe, image=ruta_verde).place(x=25, y=60)
Все метки добавляются в кадр друг за другом, я нахожу способ скрыть все эти метки после нажатия кнопки «Выбрать изображение» и когда я нажал кнопку вызова «Предсказать», то есть показать, например «Метка этикетки».
Я должен скрыть все эти ярлыки, когда программа уже запущена, но на данный момент я не могу этого сделать,
Я попытался использовать label1.lower()
place_forget()
, чтобы скрыть эти ярлыки и показать его, я попытался mylabel.pack()
from tkinter import *
import cv2
from PIL import Image
from PIL import ImageTk
from tkinter import filedialog as fd
import numpy as np
def select_image():
# grab a reference to the image panels
global panelA, panelB
# open a file chooser dialog and allow the user to select an input
# image
#ocultar clase predecida anteriormente:
path = fd.askopenfilename()
# ensure a file path was selected
if len(path) > 0:
# load the image from disk, convert it to grayscale, and detect
# edges in it
image = cv2.imread(path)
median = cv2.medianBlur(image, 9)
#Resize
#BGT TO RGB
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
median = cv2.cvtColor(median, cv2.COLOR_BGR2RGB)
dim = (340, 257)
original = cv2.resize(image, dim, interpolation = cv2.INTER_AREA)
median = cv2.resize(median, dim, interpolation = cv2.INTER_AREA)
# Convertir imagenes al formato PIL
original = Image.fromarray(original)
median = Image.fromarray(median)
#Pass to ImageTk format
original = ImageTk.PhotoImage(original)
median = ImageTk.PhotoImage(median)
#if the panels are none
if panelA is None or panelB is None:
#El primer panel guarda la primera imagen
panelA = Label(image=original)
panelA.image = original
panelA
panelA.pack(side="left", padx=10, pady=10)
#the second panel show the pre-processed image
panelB = Label(image=median)
panelB.image = median
panelB.pack(side="right", padx=10, pady=10)
hideLabels()
#in other cases update the panels
else:
# update the pannels
panelA.configure(image=original)
panelB.configure(image=median)
panelA.image = original
panelB.image = median
hideLabels()
def hideGreen():
labelverde.place_forget()
def hideLabels():
hideGreen()
def showMature():
labelmaduro.pack() #show label after push Predict Button
#Initialize the main window
root = Tk()
root.configure(background='black')
root.title("Opencv test")
panelA = None
panelB = None
#Frame which contains the labels
miframe = Frame(bg="#0F2D80", width="200", height="200")
ruta_maduro = PhotoImage(file="maduro.png")
ruta_pinton = PhotoImage(file="pinton.png")
ruta_verde = PhotoImage(file="verde.png")
#Create labels to show and hidde according to the prediction
labelmaduro = Label(miframe, image=ruta_maduro).place(x=25, y=60)
labelpinton = Label(miframe, image=ruta_pinton).place(x=25, y=60)
labelverde = Label(miframe, image=ruta_verde).place(x=25, y=60)
#add frame to root
miframe.pack(side="right", anchor="n", padx=10)
#User buttons
btn2 = Button(root, text="Predict Button", command=showMature)
btn2.pack(side="bottom", fill="both", expand="yes", padx="10", pady="10")
btn = Button(root, text="Select Image", command=select_image)
btn.pack(side="bottom", fill="both", expand="yes", padx="10", pady="10")
root.resizable(0,0)
# kick off the GUI
root.mainloop()
Я хочу скрыть все эти метки и показать только одну из них после нажатия кнопки «предсказать», но когда программа уже запустилась, все эти метки должны быть скрыты, поэтому я должен показывать только одну метку в соответствии с прогнозируемым классом.
![program image which starts with the label green/verde over all the labels](https://i.stack.imgur.com/OaP6V.png)