如何在Tkinter中同时显示多个画布?
在Tkinter中,每个窗口都可以包含一个画布(Canvas)。但有时候,我们需要在同一个窗口中显示多个画布,例如,一个画面上需要同时展示表格和图表。那么,应该如何在Tkinter窗口中同时显示多个画布呢?
创建多个画布
首先,我们需要创建多个画布。在Tkinter中,可以使用Canvas类来创建一个画布。不同的画布应该具有不同的名称,以让我们能够正确地访问它们。
下面的示例展示了如何在一个Tkinter窗口中创建两个画布:
import tkinter as tk
# 创建Tkinter窗口
root = tk.Tk()
# 创建第一个画布
canvas1 = tk.Canvas(root, width=200, height=200, background="white")
canvas1.grid(row=0, column=0)
# 创建第二个画布
canvas2 = tk.Canvas(root, width=200, height=200, background="white")
canvas2.grid(row=0, column=1)
# 显示窗口
root.mainloop()
上面的代码中,我们首先创建了一个Tkinter窗口,并命名它为root。然后,我们使用Canvas类创建了两个画布,一个名为canvas1,一个名为canvas2。每个画布的尺寸为200×200,并且设置了白色的背景。最后,我们使用grid()函数将两个画布放置在窗口中的第一行上,一个位于第一列,一个位于第二列。
运行这段代码,我们会得到一个包含两个画布的窗口,两个画布相互独立。
在画布中绘制图形
现在,我们已经成功地创建了两个画布。接下来,我们需要在画布中绘制图形。
这里,我们不详细介绍如何在Tkinter中绘制图形,但需要注意的是,每个画布上的绘图指令都必须使用canvas1或canvas2名称进行调用,以表明是在哪个画布上进行绘制。
以在第一个画布中绘制一条直线为例,我们可以使用以下代码:
canvas1.create_line(0, 0, 200, 200)
这行代码将在canvas1上绘制一条从(0,0)到(200,200)的直线。
如果我们想要在两个画布上都绘制同一件事情,那么我们需要在两个画布上都调用同一条指令。例如,我们可以在两个画布上都绘制一条直线,如下所示:
canvas1.create_line(0, 0, 200, 200)
canvas2.create_line(0, 200, 200, 0)
这将在canvas1上绘制一条从(0,0)到(200,200)的直线,以及在canvas2上绘制一条从(0,200)到(200,0)的直线。
在画布中添加组件
Tkinter中的画布不仅可以用来绘制图形,还可以作为其他组件的容器。例如,我们可以在画布中添加一个按钮或标签。
以在第一个画布中添加一个标签为例,我们可以使用以下代码:
label = tk.Label(canvas1, text="This is canvas 1")
label.place(x=50, y=50)
这段代码将在canvas1中添加一个名为label的标签,标签上的文本为”This is canvas 1″,其位置位于(50,50)。
同样地,如果我们想要在两个画布上都添加一个标签,我们需要在两个画布上都调用同一段代码:
label1 = tk.Label(canvas1, text="This is canvas 1")
label1.place(x=50, y=50)
label2= tk.Label(canvas2, text="This is canvas 2")
label2.place(x=50, y=50)
这将在canvas1和canvas2中都添加一个名为label的标签,标签上的文本分别为”This is canvas 1″和”This is canvas 2″,在两个画布上的位置相同。
总结
在Tkinter中同时显示多个画布需要通过创建多个画布,并在每个画布中绘制图形或添加组件来实现。每个画布应该具有不同的名称,以便我们可以正确地访问它们。在画布上绘制图形或添加组件时,需要使用各自的名称进行调用,以表明是在哪个画布上进行操作。
以下是完整的示例代码:
import tkinter as tk
# 创建Tkinter窗口
root = tk.Tk()
# 创建第一个画布
canvas1 = tk.Canvas(root, width=200, height=200, background="white")
canvas1.grid(row=0, column=0)
# 在第一个画布中绘制直线
canvas1.create_line(0, 0, 200, 200)
# 在第一个画布中添加标签
label1 = tk.Label(canvas1, text="This is canvas 1")
label1.place(x=50, y=50)
# 创建第二个画布
canvas2 = tk.Canvas(root, width=200, height=200, background="white")
canvas2.grid(row=0, column=1)
# 在第二个画布中绘制直线
canvas2.create_line(0, 200, 200, 0)
# 在第二个画布中添加标签
label2 = tk.Label(canvas2, text="This is canvas 2")
label2.place(x=50, y=50)
# 显示窗口
root.mainloop()
结论
在Tkinter中同时显示多个画布可通过创建多个画布,并在每个画布中绘制图形或添加组件来实现。每个画布应该具有不同的名称,以便我们可以正确地访问它们。在画布上绘制图形或添加组件时,需要使用各自的名称进行调用,以表明是在哪个画布上进行操作。