【问题标题】:How can I set the order of duplicated widgets in tkinter, python?如何在 tkinter、python 中设置重复小部件的顺序?
【发布时间】:2021-12-18 06:37:39
【问题描述】:

我使用 image(image1) 作为背景,并使用 create_window 方法创建了条目。 我想让 image(image2) 用 create_image 方法覆盖条目。 但是每次都会显示 Entry 小部件。(Entry - image2 - imgae1) 如何更改这些的顺序,例如 image2-Entry-image1。 我的代码如下。

        self.img_main = PhotoImage(file=r"C:\Bart\My library\Python\Grinding\GUI\capture\image1.png")
        self.canvas_main = Canvas(self, width=1366, height=768, bd=0)
        self.canvas_main.pack(fill=BOTH, expand=True)
        self.canvas_main.create_image(0,0, image=self.img_main, anchor=NW)

        self.entry = Entry(self, width=12, justify="center", bg="#A5C1DE")
        self.canvas_main.create_window(72, 287, height=32, anchor=NW, window=self.entry)

        self.cbb_pro_sel_img_1 = PhotoImage(file=r"C:\Bart\My library\Python\Grinding\GUI\capture\image2.png")
        self.cbb_pro_sel = self.canvas_main.create_image(36, 75, anchor=NW, image=self.cbb_pro_sel_img_1)

【问题讨论】:

    标签: python tkinter tkinter-canvas tkinter-entry


    【解决方案1】:

    您不能在嵌入式小部件上方的画布上提升图像对象。来自画布文档:

    画布中的项目是为了显示而排序的,首先显示显示列表中的第一个项目,然后是列表中的下一个项目,依此类推。显示列表中较晚的项目掩盖了显示列表中较早的项目,有时被称为在较早项目的“顶部”。当一个新项目被创建时,它被放置在显示列表的末尾,在其他所有项目之上。小部件命令可用于重新排列显示列表的顺序。 窗口项目是上述规则的一个例外。底层窗口系统要求它们始终绘制在其他项目之上。

    相反,您可以创建一个包含图像的标签,然后使用create_window 将标签放在条目上。既然是小部件,就可以出现在入口小部件的上方。

    【讨论】:

    • 感谢您的回答!! :) 如果我使用标签,图像的透明部分不再透明。我会考虑更多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2012-07-01
    • 2015-08-21
    相关资源
    最近更新 更多