python - 如何在 tk.Canvas 上定位形状和文本以免它们被切断?

标签 python python-2.7 tkinter tkinter-canvas

我正在使用 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 边框和高亮环在小部件内部,因此使用了一些可绘制区域并可能隐藏其他对象的部分。

最简单的解决方案是将 highlightthicknessborderwidth 属性设置为零:

c.configure(highlightthickness=0, borderwidth=0)

如果您需要边框和/或高亮环,请将 Canvas 放在框架内。

关于python - 如何在 tk.Canvas 上定位形状和文本以免它们被切断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36192739/

相关文章:

java - 编程语言中的堆栈性能

python - 如何在 IOS 应用程序上本地解析 AIML 文件?

python - 尝试运行 Flask Web 应用程序时出现 null is not defined 错误

python - SQLAlchemy 的随机错误

python 2.7。如何打开继承全局和当前文件夹的独立终端

python - 如何在 win32com 中迭代工作表?

Python yaml 在引号中生成很少的值

python - Canvas 事件仅有效一次

python - 如何在Python迷宫游戏中分解一个函数来引用不同的 "levels"?

python - 如何使用 tkinter 创建下一个按钮以在多个框架之间切换