Добавление виджета к метке приводит к исчезновению всех остальных виджетов

#python #image #tkinter #tkinter-label

Вопрос:

Я использую Python с PIL

Короткая версия:
я хочу отобразить изображение в фоновом режиме (которое, насколько мне известно, работает только с Label s?) Теперь это есть в каждом виджете Label , как master . Я также хочу добавить виджеты позже (с указанным Label в качестве мастера) с привязанной функцией.

Когда я нажимаю на Button него , все виджеты, кроме вновь созданного, исчезают (простой код ниже).

Вопрос:
Существуют ли команды для предотвращения этого, или есть альтернативы Label , которые я могу использовать, или уже есть сообщение, посвященное этой проблеме?

Длинная версия:
Я программирую Monopoly на Python. Мой дизайн включает в себя рамку, которая является общей для двух виджетов. С помощью a Button вы можете переключаться между этими виджетами. Чтобы сделать дизайн удобным и более визуально привлекательным, один из этих виджетов (а Label ) имеет фон в виде деревянного стола. При создании все размещено так, как должно быть, но когда я нажимаю a Button , чтобы добавить виджет в свой 2-мерный Frame Matrix (на Label виджете), все Label , кроме нового созданного виджета, исчезает. Когда вы снова забываете о Label вызове, все идет так, как должно быть (с новым виджетом)

Из-за многих вещей , которые я уже добавил к этому Label , перезагрузка Label не будет опцией, задержка будет значительной. Я сталкивался с этой проблемой дважды, но всегда каким — то образом умудрялся обойти ее. Испытывая эту проблему сейчас 3 раза, я никогда не мог найти никакого решения этой проблемы самостоятельно или в Интернете…и поверьте мне, я искал (или искал с неправильными ключевыми словами, я не знаю).

Если моя цель еще не ясна: я хочу добавлять виджеты в a Label (или другие виджеты, поддерживающие изображения), когда захочу (события), чтобы все остальные дочерние элементы (виджеты) этого Label не исчезали.

Приведенный ниже код является очень простым кодом, чтобы показать вам пример моей проблемы. Мой фактический код для моей программы содержит более 2 тысяч строк, и мое кодирование-это не то, на что легко смотреть, поэтому я не буду его включать.

 from tkinter import*
import tkinter as tk


class Oberflaeche:
    def __init__(self, main):
        self.mainframe = Label(main,height= 1000,width = 1000, bg='azure4' )
        self.mainframe.pack()

        self.array1 = []

        # To resemble it (for me):
        for k in range(5):
            array2 = []
            self.array1.append(array2)
            for i in range(11):

               array2.append(Frame(self.mainframe, height=120, width=80, bg='red'))
               self.array1[k][i].grid(row=k, column=i, pady=(5, 5), padx=(1, 1))

        # Just for visual purpose:
        for n in range(3):
            aLabel = Label(master=self.array1[n][n],bg = 'blue')
            aLabel.pack()
            aLabel.bind('<Button-1>', self.show)

    # Something I want to add:
    def show(self,event):
        Label1 = Label(self.array1[2][3], bg = 'yellow')
        Label1.pack()


main = tk.Tk()
Oberflaeche = Oberflaeche(main)
main.mainloop()
 

Комментарии:

1. затем начните с того, чтобы сделать его презентабельным. это поможет вам и другим, а также

2. _»… который, насколько мне известно, работает только с ярлыками?») — ярлыки, кнопки, холсты, текстовые виджеты могут содержать изображения. Контрольные кнопки и радиокнопки тоже могут.

3. Как код в вашем вопросе воспроизводит проблему?

4. Нигде в вашем коде вы не создадите метку с изображением. О каком лейбле ты говоришь?

Ответ №1:

Решение: Холст

Ладно, я как-то совсем забыл о холсте, с холстом он просто отлично работает. Мне жаль, что я не продумал это до конца, прежде чем опубликовать это…Это мой первый раз, когда я работаю с python(это не делает его лучше), и мне удалось использовать только метки и рамки для создания своего проекта (поэтому я думал только о метках и рамках, чтобы найти решение). Я прошу прощения. Я все равно собираюсь ответить на ваши вопросы. (Надеюсь, это нормально, когда я отвечу на них здесь?)

  1. Да, я должен начать! Я как раз нахожусь в том месте, где, по-моему, время на обновление кода было бы лучше потратить на его доработку.

2.Спасибо! да, мне следовало поискать получше!

3.Простой код отображает ту же проблему: при добавлении виджета к метке(с событием) исчезает любой другой виджет с меткой в качестве основного. По крайней мере, это происходит на моем экране. Если хотите, я могу добавить фотографии

4.Возможно, я сообщил об этом плохо: после демонтажа моего кода я обнаружил, что проблема в ярлыке(а не в изображении). Та же проблема, которая возникла бы у меня с Этикеткой с изображением, у меня есть только с этикеткой. Вот почему я подумал, что было бы проще показать вам пример только с меткой(называемой мэйнфреймом).

Спасибо, что отредактировали мой пост, чтобы сделать его более привлекательным и исправить мою грамматику!