我有一个简单的 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()
您正在网格的第一行设置旋转框和组合框。当第二行中的标签被填充时,上面各行的内容会根据标签的数量变宽。
要解决此问题,请尝试将旋转框和组合框放在单独的框架中。然后先包装框架,然后包装标签。这样框架中的元素就不会受到标签宽度的影响。
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