英文:
how to use pack() method to center element in a LabelFrame in tkinter
问题
我在一个LabelFrame中定义了一些元素,我定义了LabelFrame的宽度和高度,并将pack_propagate设置为0。但当我打包我的内容时,标签框中的内容没有使用其高度。我想要将元素均匀分布在框架的高度上。这是否可能?
英文:
I defined a LabelFrame as a parent for some elements, I defined the width and the height of the LabelFrame and i set pack_propagate to 0
self.parent.grid_rowconfigure(0, weight=1)
self.parent.grid_columnconfigure(0, weight=1)
self.parent.grid_rowconfigure(1, weight=1)
self.parent.grid_columnconfigure(1, weight=1)
# Déclaration des elements de "Tag NFC"
self.tag_label = tk.LabelFrame(self.parent, text="Tag NFC",height=200,width=280,bg=self.background_color ,font=self.title_font)
self.tag_label.grid(column=0,row=0,ipadx=10,ipady=10,padx=10,pady=10)
self.tag_label.pack_propagate(0)
self.uid_entry_label= tk.Label(self.tag_label, text="ID Utilisateur",bg=self.background_color,font=self.content_font)
# self.uid_entry_label.grid(column= 0, row=0 )
self.uid_entry_label.pack()
self.uid_entry = tk.Spinbox(self.tag_label,font=self.content_font)
# self.uid_entry.grid(column= 0, row=1 )
self.uid_entry.pack()
self.key_entry_label= tk.Label(self.tag_label, text="Clé de chiffrement",bg=self.background_color,font=self.content_font)
# self.key_entry_label.grid(column= 0, row=2 )
self.key_entry_label.pack()
self.key_entry = ttk.Combobox(self.tag_label,font=self.content_font)
# self.key_entry.grid(column=0, row=3 )
self.key_entry.pack()
but when i pack my content, the content in the label frame dont use the height of its
I want to spread the element equally across the height of the frame
Is it possible ?
答案1
得分: 1
我倾向于使用的解决方案是创建"容器" Frame
来组织小部件,这可以使整体的 pack
行为更加可预测。
在这里,我创建了两个新的 Frame
,top_items
和 bottom_items
,并设置它们的 pack
参数以使它们在 LabelFrame
中居中显示。
self.top_items = tk.Frame(self.tag_label, bg=self.background_color)
self.top_items.pack(expand=True, fill='x')
self.uid_entry_label = tk.Label(self.top_items, text="ID Utilisateur", bg=self.background_color, font=self.content_font)
self.uid_entry_label.pack()
self.uid_entry = tk.Spinbox(self.top_items, font=self.content_font)
self.uid_entry.pack()
self.bottom_items = tk.Frame(self.tag_label, bg=self.background_color)
self.bottom_items.pack(expand=True, fill='x')
self.key_entry_label = tk.Label(self.bottom_items, text="Clé de chiffrement", bg=self.background_color, font=self.content_font)
self.key_entry_label.pack()
self.key_entry = ttk.Combobox(self.bottom_items, font=self.content_font)
self.key_entry.pack()
请注意,_label
和 _entry
小部件的母/父级相应地已更改!
作为一种附带说明,第二个标签/字段看起来有点太低。如果你想稍微向上挪动它一点,你可以在 bottom_items
Frame
的底部添加一些 y 填充,像这样:
self.bottom_items.pack(expand=True, fill='x', pady=(0, 30))
英文:
A solution I tend to use is creating "container" Frame
s for groups of widgets, which makes the overall pack
ing behavior more predictable.
Here, I've created two new Frame
s, top_items
and bottom_items
, and set their pack
parameters to center them in the LabelFrame
self.top_items = tk.Frame(self.tag_label, bg=self.background_color)
self.top_items.pack(expand=True, fill='x')
self.uid_entry_label = tk.Label(self.top_items, text="ID Utilisateur",bg=self.background_color,font=self.content_font)
self.uid_entry_label.pack()
self.uid_entry = tk.Spinbox(self.top_items,font=self.content_font)
self.uid_entry.pack()
self.bottom_items = tk.Frame(self.tag_label, bg=self.background_color)
self.bottom_items.pack(expand=True, fill='x')
self.key_entry_label = tk.Label(self.bottom_items, text="Clé de chiffrement",bg=self.background_color,font=self.content_font)
self.key_entry_label.pack()
self.key_entry = ttk.Combobox(self.bottom_items,font=self.content_font)
self.key_entry.pack()
Note that the master/parent of the _label
and _entry
widgets has changed accordingly!
<hr>
As an aside, the second label/field looks a little too low to my eye. If you want to nudge it upwards a bit, you can add some y padding to the bottom side of the bottom_items
Frame
like this:
self.bottom_items.pack(expand=True, fill='x', pady=(0, 30))
答案2
得分: 0
> 但是当我打包我的内容时,标签框中的内容并不使用其高度。
> 我想要将元素均匀地分布在框架的高度上。
> 这可能吗?
- 你不需要使用
grid_rowconfigure
和grid_columnconfigure
。它不会影响任何事情。 - 你不需要指定
height=200, width=280
。tag_label.pack_propagate
会处理。 - 将
tag_label.pack_propagate
的索引设置为 1,而不是零。 - 你可以使用
pack()
或者grid()
。这取决于你。至于我,我使用pack()
。
英文:
> but when i pack my content, the content in the label frame dont use
> the height of its.
> I want to spread the element equally across the height of the frame
>
> Is it possible ?
- You don't need grid_rowconfigure and grid_columnconfigure. It doesn't
affect anything. - You don't need to specify height=200,width=280. The
tag_label.pack_propagate
will handle. - Set the tag_label.pack_propagate index to 1 instead of zero.
- You can use
pack()
orgrid()
. It is up to you. As for me, I usepack()
.
Code:
self.tag_label = tk.LabelFrame(self.parent, text="Tag NFC", bg=self.background_color)
self.tag_label.pack()
# self.tag_label.grid(column=0,row=0,ipadx=10,ipady=10,padx=10,pady=10)
self.tag_label.pack_propagate(1)
Screenshot:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论