【问题标题】:frame on canvas overlapping a line created in canvas画布上的框架与画布中创建的线条重叠
【发布时间】:2020-08-28 01:44:19
【问题描述】:

我需要在画布中创建一个框架,以便删除用户可以放置在画布中的大量小部件。它放置在框架中,因此我可以使用 canvas.delete("all") 删除它们。我还需要一些线条,因为 Frame 不接受线条,我需要直接在下面的画布中创建它。问题是框​​架与线重叠。我尝试了 canvas.lift() 和 tag.raise() 方法,但它们不起作用。知道如何解决吗?

from tkinter import *

root = Tk()
root.geometry('1560x750')

canvas_right=Canvas(root)
canvas_right.config(width=1000, height=1560, bg='light grey')
canvas_right.grid(row=1,column=3, rowspan=1550,ipadx=1300,ipady=750,sticky=NW)

frame = Frame(canvas_right, bg='light blue')
main_frame = canvas_right.create_window(500, 780, height=1700, width=760, window=frame)

line1 = canvas_right.create_line(100,100,3000,1000)
canvas_right.lift(line1)

root.mainloop()

【问题讨论】:

    标签: python python-3.x tkinter canvas frame


    【解决方案1】:

    放置在画布中的小部件将始终位于其他图形项目(如线条和圆圈)之上。没有办法解决这个限制。

    来自canonical tcl/tk documentation

    注意:由于窗口管理方式的限制,不能在窗口项之上绘制其他图形项(如线条和图像)。窗口项总是会遮盖与其重叠的任何图形,无论它们在显示列表中的顺序如何。另请注意,与其他画布项不同,窗口项不会被它们包含的画布边框裁剪以显示,而是由 window 选项指定的窗口的父窗口小部件裁剪;当父窗口小部件是画布时,这意味着窗口项可以与画布的边框重叠。

    【讨论】:

    • 还有在框架上放一条线吗?否则我不得不将所有小部件都放在画布上并一个一个地删除它们
    • @fernando:不,没有办法在框架上画线。
    猜你喜欢
    • 2018-12-14
    • 2021-03-19
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多