我正在使用 Tkinter 的 Canvas 为我的 GUI 创建简单的图形。我注意到我想将我的形状和文本放在 Canvas 的角落,但它们最终被部分隐藏了。对于文本,我看到有一个 anchor
选项,文档建议将其设置为 NW
,例如,如果我想将文本放在左上角,但是即使那样,我也只看到文本开头的一小部分被截掉了。这是我的代码:
import Tkinter as tk
root = tk.Tk()
root.geometry("300x300")
c = tk.Canvas(root, bg="green", width=300, height=300)
c.pack(fill="both", side="right", expand=True)
c.create_text(0,0,text="Hello world!", anchor="nw")
root.mainloop()
我知道我可以调整文本开始位置的坐标,并通过反复试验找出哪一个给出最好看的结果,但我想知道是否有更聪明的方法来做到这一点。
当我尝试创建形状(例如圆形)时,我注意到类似的事情:
import Tkinter as tk
root = tk.Tk()
root.geometry("300x300")
c = tk.Canvas(root, bg="green", width=300, height=300)
c.pack(fill="both", side="right",expand=True)
c.create_oval(0,0,300,300, fill="gray")
root.mainloop()
对于圆,最接近边缘的圆部分被切掉。如果我拉伸(stretch)并拖动窗口使其变大,我可以看到圆圈的最右边和底部,所以它们正在被绘制。我也没有看到类似于圆的 anchor
的选项。
我注意到我的 Canvas 周围、 Canvas 和窗口之间有极小的空白。我将包装选项设置为填充所有边,并在有额外空间可用时展开。我想知道这是否是问题所在。
最佳答案
不幸的是, Canvas 边框和高亮环在小部件内部,因此使用了一些可绘制区域并可能隐藏其他对象的部分。
最简单的解决方案是将 highlightthickness
和 borderwidth
属性设置为零:
c.configure(highlightthickness=0, borderwidth=0)
如果您需要边框和/或高亮环,请将 Canvas 放在框架内。
关于python - 如何在 tk.Canvas 上定位形状和文本以免它们被切断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36192739/