如果我的问题是重复的,我提前道歉,但是我没有找到这个问题的答案。在

我正在学习Tkinter,我正在努力理解标签的字体类型、大小、宽度和字符串长度之间的关系。在

具体来说,我的问题是:我已经创建了一个小部件:一个800x640画布,我想在上面放置其他

小工具。在

在这个画布上,我想放置一个带有以下文本的标签

属性:font:Helvetica,font-size:20,text=“主应用程序”。我想要

将这个标签小部件放在

相对于控件0,0。我要标签

宽度为200意味着它的背景几乎占画布的1/3

大小(在我设法做到这一点后,我计划再增加2个标签)。我猜

标签的高度由字体大小决定,在本例中为20。我

将标签放在坐标y=20处,这个坐标似乎没问题。在

我在google上查了一下,发现label小部件的width参数不是实际的宽度,而是与标签文本的字体和大小有关:比如如果我理解正确:如果宽度是6,那么标签的宽度将足够包含6个字符,在我的例子中,verdana大小为20。但是我没能弄清楚我应该给标签什么宽度和什么样的x坐标,所以它从画布的x点开始。下面是我写的代码:

from tkinter import *
from tkinter.ttk import *
from tkinter import messagebox
from tkinter import Menu
# Define the application class where we will implement our widgets
class Application(Frame):
def __init__(self, master):
super(Application, self).__init__(master)
# CANVAS COLOUR DEFAULTS TO THE COLOUR OF THE WORKING WINDOW
canvas = Canvas(master, width=800, height = 640, bg="gray") # IF YOU DO .PACK() HERE IT WILL RETURN NONE AND THEN YOU WILL HAVE PROBLEMS BECAUSE .PACK() RETURNS A 'NONE' TYPE OBJECT
canvas.place(relx=0.5, rely=0.5, anchor=CENTER)
# The 'menu' of the application. The selection labels
main_application_label = Label(master, text="main_application", font=("Helvetica", 20))
main_application_window = canvas.create_window(103,20, window=main_application_label)
main_application = Tk()
main_application.title("main_application")
app = Application(main_application)
app_width = 800
app_height = 640
screen_width = main_application.winfo_screenwidth()
screen_height = main_application.winfo_screenheight()
x_coord = (screen_width/2) - (app_width/2)
y_coord = (screen_height/2) - (app_height/2)
main_application.geometry("%dx%d+%d+%d" % (app_width, app_height, x_coord, y_coord))
main_application.mainloop()

我设法使标签在0,0点左右(通过给出更多的值,直到我得到正确的值),但是标签的实际宽度不是200像素(画布的1/3)。请帮助我理解我应该给width参数指定什么值,这样标签的背景是画布大小的1/3,如果可能的话,解释字符字体和宽度参数之间的关系,这样我就可以对任何窗口小部件执行此操作,而不管其文本的长度如何。感谢您阅读我的帖子!在

编辑:我想做的是在画布上放置3个小部件(本例中是标签,但这无关紧要)。我不明白“锚定”选项的作用,这让我很困惑,因为我希望控件的中心始终位于给定的坐标上,但当我改变锚定时,小部件中心的位置也在改变,这让我很困惑。多亏了@Bryan Oakley,现在一切都好了。谢谢。在