1

我正在尝试使用将标签放置在中心,place()但是当文本更改时,由于新单词的长度,它的对齐方式向右移动。如何使用place().

from tkinter import *

BACKGROUND_COLOR = "#B1DDC6"

# ------------------------------ UI --------------------------------------#
window = Tk()
window.title('Flashy')
window.config(padx = 50, pady = 50,bg=BACKGROUND_COLOR )



canvas = Canvas(window, width= 800, height = 626,bg = BACKGROUND_COLOR,highlightthickness=0)
canvas.grid(row  = 0, column = 0, columnspan = 2)
card_front_img = PhotoImage(file="./images/card_front.png")
canvas.create_image(400,263,image = card_front_img)
lang_label = Label(text   = 'French', font = ('Ariel',40,'italic'),anchor = CENTER)
lang_label.place(x = 300, y = 100)
word_label =Label(text = 'trouva', font = ('Arial',60,'bold'),anchor= CENTER)
word_label.place(x = 250, y = 200 )
window.mainloop()

前:

word_label =Label(text = 'trouve', font = ('Arial',60,'bold'),anchor= CENTER)
word_label.place(x = 250, y = 200 )

在此处输入图像描述

后:

word_label =Label(text = 'trodawdauve', font = ('Arial',60,'bold'),anchor= CENTER)
word_label.place(x = 250, y = 200 )

在此处输入图像描述

4

3 回答 3

1

我找到了一个可以正常工作但不使用的替代方法place() 。通过使用canvas.create_text()而不是place()文本将自身对齐在中心,无论单词的长度如何

canvas.create_text(400,150, text='French', font=('Ariel', 40, 'italic'))
canvas.create_text(400,263, text='wordwdawdadawd', font=('Ariel', 60, 'bold'))
于 2021-06-01T17:57:41.473 回答
1

如果要使用place,只需将anchor属性设置为"n"(北)。这将导致小部件的“北”(顶部中心)部分位于指定的坐标处。使用"s"(south) 或"c"(center) 会产生类似的效果,尽管它会改变标签的哪一部分位于给定的 y 坐标处。

lang_label.place(x = 250, y = 100, anchor="n")
word_label.place(x = 250, y = 200, anchor="n" )

无论输入的文本有多长world_label,它都将始终以与lang_label.

注意:x 和 y 坐标仅用于说明目的,您需要将它们计算为您希望它们所在位置的适当值。关键是,如果 x 坐标相同,则标签将相对于彼此居中。

于 2021-06-01T19:26:06.330 回答
0

您还可以创建一个居中的框架,然后将标签放置在其上。这是一个真正帮助我学习思想家的伟大网站:https ://www.tutorialspoint.com/python/python_gui_programming.htm

于 2021-06-01T18:06:14.547 回答