【问题标题】:How to switch between difference "frames"如何在不同的“框架”之间切换
【发布时间】:2023-03-26 17:04:01
【问题描述】:

我最近一直在学习如何使用tkinter,我想使用按钮在两个不同的canvas(更合适的术语)之间切换。但是,每当我在按钮之间单击以切换帧时,屏幕似乎并没有清除。有什么办法解决这个问题?

#Imports
import tkinter as tk

#master means the variable

class App(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master.title("Testing") #Setting the title
        self.master.minsize(800, 600) #The minimum size it can be
        self.canvas = tk.Canvas(self, bg="black")

        self.section1()

    def section2(self):

        self.pack(fill=tk.BOTH, expand=1)

        #Creating the canvas and drawing a line

        self.canvas.create_line(15, 25, 200, 25, fill="red")

        #Going back to the "main menu"
        self.exit = tk.Button(self, text="exit", fg="red", command=self.section1)
        self.exit.place(x=0, y=50)

        self.canvas.pack(fill=tk.BOTH, expand=1)

    def section1(self): #Main menu
        self.pack(fill=tk.BOTH, expand=1)

        self.button = tk.Button(self, text="See Line", fg="red", command=self.section2)
        self.button.place(x=0, y=0)

        #Exit button
        self.exit = tk.Button(self, text="exit", fg="red", command=self.master.destroy)
        self.exit.place(x=0, y=25)


window = App() #Declaring the window
window.mainloop()

【问题讨论】:

  • 我在你的代码中只看到一个画布。你想切换到什么?
  • section1()section2() 不是“帧”

标签: python tkinter tkinter-canvas


【解决方案1】:

您可以使用几何管理器pack-pack_forget(或@987654327 @-grid_forget)

可能是这样的:

import tkinter as tk


class App(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("Testing")
        self.minsize(800, 600)
        self.swap_btn = tk.Button(self, text='swap canvas', command=self.swap_canvas)
        self.swap_btn.pack()
        
        self.canvas1 = tk.Canvas(self, bg="black")
        self.canvas2 = tk.Canvas(self, bg="blue")
        
        self.canvasses = [self.canvas2, self.canvas1]
        self.current_canvas = self.canvas1
        self.current_canvas.pack(expand=True, fill=tk.BOTH)

        self.draw_some_stuff()
        
    def swap_canvas(self):
        self.current_canvas.pack_forget()
        self.current_canvas = self.canvasses.pop(0)
        self.canvasses.append(self.current_canvas)
        self.current_canvas.pack(expand=True, fill=tk.BOTH)
        
    def draw_some_stuff(self):
        self.canvas1.create_oval(200, 200, 300, 300, fill='blue')
        self.canvas2.create_rectangle(200, 200, 300, 300, fill='black')
        self.canvas1.create_oval(400, 200, 500, 300, fill='blue')
        self.canvas2.create_rectangle(400, 200, 500, 300, fill='black')
        

window = App() #Declaring the window
window.mainloop()

【讨论】:

    猜你喜欢
    • 2020-05-28
    • 2015-04-17
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多