python tkinter 无法在画布上实现提升方法
Posted
技术标签:
【中文标题】python tkinter 无法在画布上实现提升方法【英文标题】:python tkinter cannot implement lift method on canvas 【发布时间】:2021-05-29 16:08:25 【问题描述】:我正在尝试在 Python Tkinter 中提升和降低画布对象。我尝试了canvas.lower()
,但它导致错误提示
_tkinter.TclError:wrong # args: should be ".!canvas lower tag0rld "belowThis?
我的脚本:
import tkinter as tk
import PIL.ImageTk as itk
window=tk.Tk()
image1=itk.PhotoImage(file=“image_1.png")
canvas1 = tk.Canvas(window)
a=canvas1.create_image(0,0,image=image1)
canvas1.place(x=100,y=100)
canvas1.lower()
image2 = itk.PhotoImage(file=“image_2.png")
canvas2 = tk.Canvas(window)
b = canvas2.create_image(0,0,image=image2)
canvas2.place(x=100,y=130)
window.mainloop()
图像只是一个黑色方块和一个白色方块,所以它们无关紧要。
【问题讨论】:
您是否尝试在画布内列出/降低画布对象(如矩形/线条/...)?或者您可能正在尝试提升/降低整个画布? 请告诉我们您是如何创建画布和图像的。我的猜测是你可以这样做:image_id = <tkinter.Canvas object>.create_image(...)
然后canvas.lower(image_id)
。
@TheLizzard 我的意思是降低整个画布。
【参考方案1】:
降低整个画布:
import tkinter as tk
import tkinter as tk
window = tk.Tk()
canvas1 = tk.Canvas(window, bg="red")
canvas1.place(x=100,y=100)
canvas2 = tk.Canvas(window, bg="blue")
canvas2.place(x=100,y=130)
canvas2.tk.call('lower', canvas2._w, None)
window.mainloop()
root.mainloop()
这直接调用tcl
命令但仍然有效。问题是在tkinter.Canvas
的定义中:
class Canvas(Widget, XView, YView):
...
def tag_lower(self, *args):
"""Lower an item TAGORID given in ARGS
(optional below another item)."""
self.tk.call((self._w, 'lower') + args)
lower = tag_lower
它覆盖了Misc
类(所有小部件的基类)方法.lower
,它降低了小部件。所以我直接调用了Misc
类会调用的东西:self.tk.call('lower', self._w, belowThis)
【讨论】:
@willywillycow 我编辑了我的答案。我想这就是你要找的 为什么不加lift()
。
@willywillycow 使用place()
代替pack()
放置画布。?
@willywillycow 我编辑了我的答案试试。我还解释了为什么会发生这种情况
@willywillycow 我不知道在哪里提交错误报告/评论,但这是个好主意。此外,如果这是您正在寻找的答案,请考虑接受它,以免其他人浪费时间提出相同的解决方案。以上是关于python tkinter 无法在画布上实现提升方法的主要内容,如果未能解决你的问题,请参考以下文章
Python Tkinter 在 GUI 中嵌入 Matplotlib