【问题标题】:Tkinter - Deleting widgets of a Canvas when calling Misc.lower() methodTkinter - 调用 Misc.lower() 方法时删除画布的小部件
【发布时间】:2021-06-13 18:03:24
【问题描述】:

我只是在 python 中使用 tkinter 开发 GUI。但我在这里遇到了一些问题。我正在创建一个按钮,一旦单击它就会返回一个页面(Misc.lower(canvas2)Misc.lift(canvas1))。虽然我为self.canvas2 上的按钮创建了一个窗口,但当画布降低时,按钮仍然存在。

这是我的代码:

from tkinter import *

class Application:
    def __init__(self):
        self.window = Tk()
        self.window.geometry("1280x720")

        self.canvas1 = Canvas(self.window, highlightthickness=0, bg="#1b1b1b")
        self.canvas2 = Canvas(self.window, highlightthickness=0, bg="red2")

        self.initButtons()

        self.window.mainloop()

    def initButtons(self, *args):
        buttons = {}
        self.buttonList = []
        buttons['backButtons'] = Button(self.window, bd=0, activebackground="#1b1b1b", bg="#1b1b1b", text='Back', fg="#ffffff")
        self.buttonList.append(buttons['backButtons'])

        self.initSecondWindow()

    def initFirstWindow(self, *args):
        Misc.lower(self.canvas2)
        self.canvas1.place(relwidth=1, relheight=1)

    def initSecondWindow(self, *args):
        backButton = self.buttonList[0]
        backButton.config(command=self.initFirstWindow)
        self.canvas2.place(relwidth=1, relheight=1)

        self.canvas2.create_window(640, 360, window=backButton)

Application()

我读过一些关于canvas.delete() 的文章,但我不确定它是如何工作的。

提前致谢!

【问题讨论】:

  • 你到底有什么“问题”?
  • 实际上,当我降低创建按钮的画布时,我要求提供一种解决方案来摆脱按钮。(编辑问题)
  • 这里有一些关于 Canvas.delete() 方法的文档。总而言之,每当您创建 Canvas 项目时,都会返回一个唯一 ID,您可以稍后将其传递给 delete() 以将其删除。另请注意,尝试删除不存在的内容被视为错误。另请注意,您可以使用 canvas.itemconfigure(id, state='hidden'/'normal') 显示和隐藏 现有 画布项目。
  • 根据您要完成的任务,考虑使用Frames 来显示不同的“页面”——请参阅Switch between two frames in tkinter 接受的答案。

标签: python tkinter button canvas


【解决方案1】:

不知道您为什么只想隐藏它,那么用户将如何重定向到上一页?这是你想要的吗?

from tkinter import *

class Application:
    def __init__(self):
        # self.backButton = None
        self.window = Tk()
        self.window.geometry("1280x720")

        self.canvas1 = Canvas(self.window, highlightthickness=0, bg="#1b1b1b")
        self.canvas2 = Canvas(self.window, highlightthickness=0, bg="red2")

        self.initButtons()

        self.window.mainloop()

    def initButtons(self, *args):
        buttons = {}
        self.buttonList = []
        buttons['backButtons'] = Button(self.window, bd=0, activebackground="#1b1b1b", bg="#1b1b1b", text='Back', fg="#ffffff")
        self.buttonList.append(buttons['backButtons'])

        self.initSecondWindow()

    def initFirstWindow(self, *args):
        Misc.lower(self.canvas2)
        self.canvas2.delete(self.res)
        self.canvas1.place(relwidth=1, relheight=1)

    def initSecondWindow(self, *args):
        backButton = self.buttonList[0]
        backButton.config(command=self.initFirstWindow)
        self.canvas2.place(relwidth=1, relheight=1)

        self.res = self.canvas2.create_window(640, 360, window=backButton)

Application()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多