将小部件添加到标签会使其他所有小部件消失

时间:2021-06-20 21:55:50

标签: python image tkinter tkinter-label

我正在使用 Python 和 PIL

短版
我想在背景中显示一个图像(据我所知,它只适用于 Label?) 每个小部件现在都将这个 Label 作为 master。 我还想稍后添加带有绑定函数的小部件(以 Label 作为主控)。

当我点击 Button 时,除了新创建的小部件之外的所有小部件都消失了 (下面是简单的代码)。

问题
是否有命令可以防止这种情况, 或者有没有我可以使用的 Label 的替代品, 或者是否有帖子已经解决了这个问题?

长版
我正在用 Python 编写大富翁。我的设计包括一个由两个小部件共享的框架。使用 Button,您可以在这些小部件之间切换。 为了使设计更舒适且更具视觉吸引力,其中一个小部件(Label)具有木桌背景。创建时,一切都按原样放置,但是当我按 Button 将小部件添加到我的二维 Frame Matrix(在 Label 小部件上)时, Label 上的所有内容,但新创建的小部件消失了。 当忘记 Label 再次调用它时,一切都应该如此(使用新小部件)

由于我已经在此 Label 中添加了许多内容,因此无法选择重新加载 Label,因此延迟会很大。 我以前遇到过这个问题两次,但总是设法以某种方式解决它。 虽然现在遇到这个问题 3 次,但我从来没有找到任何解决这个问题的方法,我自己或在互联网上……相信我,我搜索过(或用错误的关键字搜索,我不知道。)

如果我的目标还不清楚: 我想将小部件添加到 Label(或其他支持图像的小部件),只要我希望(事件)没有此 Label 的所有其他子(小部件)消失。

下面的代码是一个非常简单的代码,用于向您展示我的问题的示例。 我的程序的实际代码有超过 2K 行,而且我的代码不是很容易看,所以我不会包括它。

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 个答案:

答案 0 :(得分:0)

解决方案:画布

好吧,我以某种方式完全忘记了画布,使用 Canvas 效果很好。很抱歉,我在发布之前没有考虑清楚......这是我第一次使用 python(并没有让它变得更好),我设法只使用标签和框架来构建我的项目(所以我只考虑了标签和框架)寻找解决方案的框架)。 我很抱歉。我还是要回答你的问题。 (希望我在这里回答他们时没问题?)

  1. 是的,我应该开始了!我正处于我认为更新代码的时间最好花在完成它的时候。

2.谢谢!是的,我应该搜索得更好!

3.简单的代码显示同样的问题: 将小部件添加到 Label(带有事件)时,所有其他带有主标签的小部件都会消失。至少这发生在我的屏幕上。 如果需要我可以加图片

4.我可能传达了那么糟糕的信息:在拆解我的代码后,我发现问题出在标签(不是图像)上。我在带有图像的标签上遇到的同样问题,我只有一个标签。这就是为什么我认为向您展示一个只有一个标签(称为大型机)的示例会更简单

感谢您编辑我的帖子以使其更具视觉吸引力并修正我的语法!

相关问题