python : How to center Label in tkinter window

标签 python tkinter

我正在尝试构建一个弹出窗口,其中包含供用户响应的各种文本消息。

我寻找一种方法使文本(标签)和按钮在该窗口内居中 - 但没有成功。

Popup window

弹出窗口具有确定的大小。将框架置于其中应考虑文本标签的宽度和高度(以字母数量定义)。

正如您在代码中看到的那样,wh 定义了窗口的大小,xbiasybias 有一个以 testframe 为中心的表达式(均包含 alpha1alpha2 作为文本大小的校正因子)

我正在寻找 alpha1alpha2(目前等于 1)的数学表达式...或构建此类弹出窗口的更好方法。

root = Tk()
w = '400'
h = '100'
root.geometry('{}x{}'.format(w, h))
root.configure(bg='lightgreen')

txt = StringVar()
txt.set("This is an error message")

alpha1 = 1
alpha2 = 1
xbias = int(w) / 2 - (len(txt.get()) / 2) * alpha1
ybias = int(h) / 2 - alpha2

testframe = ttk.Frame(root)
testframe.grid(row=0, column=1, pady=ybias, padx=xbias)

label1 = ttk.Label(testframe, textvariable=txt)
label1.grid(row=0, column=0)

最佳答案

您是否考虑过为此使用 .pack() 方法。您可以通过这种方式更轻松地达到预期效果:

from tkinter import *

root = Tk()
top = Toplevel(root)

w = '400'
h = '100'
top.geometry('{}x{}'.format(w, h))

frame = Frame(top)

label = Label(frame, text="This is an error message")
button = Button(frame, text="Ok")

frame.pack(expand=True) #expand assigns additional space to the frame if the parent is expanded
label.pack()
button.pack()

root.mainloop()

经过一些研究,使用网格执行此操作比预期的要容易得多,请参见下文:

from tkinter import *

root = Tk()

w = '400'
h = '100'
root.geometry('{}x{}'.format(w, h))

label = Label(root, text="text")
label.grid(column=0, row=0)
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)

root.mainloop()

如果我们为 .rowconfigure().columnconfigure() 分配一个 weight 而不是 0 然后指定的行和列将扩展以填充窗口中为其指定的空间。

关于 python : How to center Label in tkinter window,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46069531/

相关文章:

python - Tkinter 输入的第一个字母

python - Tcl 错误 : can't iconify: override-redirect flag is set

python - 如何根据 python 上的 tkinter 中的用户输入生成弹出消息?

python - 乘以多列 Pandas

python - Scrapy DEFAULT_REQUEST_HEADERS 不起作用

python - Python 3.9 和 PEP 585 中的 Typing.Any - 标准集合中的类型提示泛型

python - 读取文本文件并删除Python中除字母和空格之外的所有字符

Python - Flask - 停止页面重新提交发布请求

python - 如何创建 tkinter 背景图像?

python - 为什么 tkinter 行为随机?