微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Tkinter 中使同一列上的两个小部件具有不同的宽度?

如何解决如何在 Tkinter 中使同一列上的两个小部件具有不同的宽度?

我试图找到一种方法来格式化这个 tkinter GUI,以便我可以在同一列中拥有不同宽度的小部件。我想这样做,以便每个标签的两侧都没有多余的空白,并且可以直接放在其输入框旁边。我试过缩小列,但这掩盖了提示。可能还有另一种我不知道的方式会以视觉上吸引人的方式对其进行格式化。我愿意接受任何建议。

This is what it currently looks like.

import tkinter as tk

responses = ['running','reading','programming','fishing']
prompt_2 = "At what time do you want to do each activity?"

root = tk.Tk()
root.geometry("335x200")
root.title("Schedule Maker")

prompt = tk.Label(
    root,text=prompt_2
)
button = tk.Button(
    root,text="ENTER",width=10,height=2
)

button.grid(row=len(responses)+1,column=0)
prompt.grid(row=0,column=0)
prompt['text'] = prompt_2
label0_list = []
label1_list = []
entry0_list = []
entry1_list = []
for w in range(len(responses)):
    label0 = tk.Label(root,text=responses[w] + ":")
    label0.grid(row=w+1,column=0)
    label0_list.append(label0)
    label1 = tk.Label(root,text='to')
    label1.grid(row=w+1,column=2)
    label1_list.append(label1)
    entry0 = tk.Entry(root,width=6)
    entry0.grid(row=w+1,column=1)
    entry0_list.append(entry0)
    entry1 = tk.Entry(root,width=6)
    entry1.grid(row=w+1,column=3)
    entry1_list.append(entry1)


root.mainloop()

解决方法

tk.Tk() 想象成一个矩形空间,您可以在其中放置您的内容。 内容由您选择的几何管理器管理,例如 packgrid。 有时人们称这些矩形空间为容器。

框架用于有一个单独的区域,您可以在其中使用不同的设置组织内容。所以框架是窗口中的容器。您可以在根目录中使用 pack 并在框架中使用 grid,而不会出现任何错误。

所以我通常做的是把根想象成填充的空间区域,然后在我的脑海中将它分成一些我放置帧的块。像这样:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()

header = tk.Frame(root)
body = tk.Frame(root)
bottom_line = tk.Frame(root)

header.pack(side='top')
body.pack()
bottom_line.pack(side='bottom')

在此之后,我用它所属的内容填充容器/框架:

#header content
headline = tk.Label(header,text='At what time do you want to do each?')
headline.pack(fill='x')
#body content
first_activity = tk.Label(body,text='running:')
first_from = tk.Entry(body)
first_sep = tk.Label(body,text='to')
first_to = tk.Entry(body)

first_activity.pack(side='left')
first_from.pack(side='left')
first_sep.pack(side='left')
first_to.pack(side='left')
#bottom content
my_button = tk.Button(bottom_line,text='Enter')
my_button.pack(fill='x')

欲知更多详情[click]

附注: 如果你真的想使用网格和你的环境集,你也可以使用 prompt.grid(row=0,column=0,columnspan=4)。但看起来有点不同。

,

您可以在 sticky="e" 上使用 label0.grid(...)

label0.grid(row=w+1,sticky="e")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。