Tkinter:标签推送小部件

问题描述 投票:0回答:1

我有一个简单的 tkinter GUI。我有 SpinBox 和 Combobox(在同一行),然后是 Label(在它们下方),它根据 SpinBox 和 ComboBox 中的内容显示数据。问题是,当标签更新时,它将其他小部件(Spinbox 和 Combobox)推送到右侧。我不想那样。我应该怎么办? 我尝试同时使用包和网格。

有一个例子(实际代码有很多不相关的东西):

from tkinter import *
from ttkbootstrap.constants import *
import ttkbootstrap as tb

root = tb.Window(themename="darkly")
root.geometry("1280x720")


string1 = list("sometext"+str(i) for i in range(0, 10))


def time_update():
    content.config(text=f'{string1}')

time = tb.Spinbox(root, from_=0, to=10, font=("Helvetica", 20), command=time_update)
time.grid(row=0, column=0, pady=10, padx=10)

values = ["a", "b", "c"]
channel = tb.Combobox(root, bootstyle="dark", values=values)
channel.grid(row=0, column=1, pady=10)


content = tb.Label(text="",
                     font=("Helvetica", 15), bootstyle='info')
content.grid(row=1, column=0, columnspan=2, padx=10, pady=10)




root.mainloop()
python user-interface tkinter widget
1个回答
0
投票

您正在网格的第一行设置旋转框和组合框。当第二行中的标签被填充时,上面各行的内容会根据标签的数量变宽。

要解决此问题,请尝试将旋转框和组合框放在单独的框架中。然后先包装框架,然后包装标签。这样框架中的元素就不会受到标签宽度的影响。

frame = tb.Frame(root)  # new frame

time = tb.Spinbox(frame, from_=0, to=10, font=("Helvetica", 20), 
command=time_update)
time.grid(row=0, column=0, pady=10, padx=10)

values = ["a", "b", "c"]
channel = tb.Combobox(frame, bootstyle="dark", values=values)
channel.grid(row=0, column=1, pady=10)

frame.pack(anchor='w')  # justify to left

content = tb.Label(text="", font=("Helvetica", 15), bootstyle='info')
content.pack(padx=10, pady=10)  # pack below frame
© www.soinside.com 2019 - 2024. All rights reserved.