我使用Python 3.11.0a5作为我的平台。如何让 Tkinter
LabelFrame
在第 1 列中绘制实际尺寸?不幸的是,我无法理解如何解决 columnspan
、rowspan
等问题。
这是一张图片:
不幸的是,我不希望 LabelFrame 画得更宽。这是另一张照片。
这是我的代码:
from tkinter import *
from tkinter import ttk
# Create an instance of tkinter frame
win= Tk()
# Define the geometry of the window
win.geometry("400x160")
lblChannelName = ttk.Label(win, text='Channel Name')
lblChannelName.grid(row=0, column=0, sticky='W')
entry_channelname = ttk.Entry(win, width=45)
entry_channelname.grid(row=0, column=1, sticky='W')
lblChannelTopic = ttk.Label(win, text = 'Channel Topic')
lblChannelTopic.grid(row=1, column=0, pady=2, sticky='W')
entry_channelTopic = ttk.Entry(win, width=45)
entry_channelTopic.grid(row=1, column=1, pady=2, sticky='W')
# Initialize a LabelFrame Widget
labelframe = LabelFrame(win, width=400, height=200, bd=5)
labelframe.grid(row=3, padx=2, pady=5, columnspan=18, sticky='WE')
# Checkbutton Invite
invite = IntVar()
ck1 = ttk.Checkbutton(labelframe, text ='Invite Only[+i]', variable=invite)
ck1.grid(row=0, column=0, padx=0, sticky='W')
# Checkbutton Moderated
moderated = IntVar()
ck2 = ttk.Checkbutton(labelframe, text ='Moderated[+m]', variable=moderated)
ck2.grid(row=0, padx=170, columnspan=3, sticky='W')
# Checkbutton Message
message = IntVar()
ck3 = ttk.Checkbutton(labelframe, text ='No Outside Message[+n]', variable=message)
ck3.grid(row=1, column=0, sticky='W')
# Checkbutton Private
private = IntVar()
ck4 = ttk.Checkbutton(labelframe, text ='Private[+p]', variable=private)
ck4.grid(row=1, padx=170, columnspan=3, sticky='W')
# Checkbutton Only ops
topics = IntVar()
ck5 = ttk.Checkbutton(labelframe, text ='Only ops set topics[+t]', variable=topics)
ck5.grid(row=2, column=0, sticky='W')
# Checkbutton Secret Channel
secret = IntVar()
ck6 = ttk.Checkbutton(labelframe, text ='Secret Channel[+s]', variable=secret)
ck6.grid(row=2, padx=170, columnspan=3, sticky='W')
# Checkbutton Keyed
keyed = IntVar()
ck7 = ttk.Checkbutton(labelframe, text ='Channel is keyed[+k]', variable=keyed)
ck7.grid(row=3, column=0, sticky='W')
lblkeyed = ttk.Label(labelframe, text='Key:')
lblkeyed.grid(row=3, padx=135, columnspan=2, sticky='W')
entry_keyed = ttk.Entry(labelframe, width=20)
entry_keyed.grid(row=3, padx=170, columnspan=3, sticky='W')
# Checkbutton limit
limit = IntVar()
ck8 = ttk.Checkbutton(labelframe, text ='Limit channel members[+l]', variable=limit)
ck8.grid(row=4, column=0, sticky='W')
win.mainloop()
如何修复图1中的标签框?
在代码中,当您网格
labelframe
时,将 columnspan
更改为 2
。第 24 行将如下所示:
labelframe.grid(row=3, padx=2, pady=5, columnspan=2, sticky='WE')
这会将您的
LabelFrame
设置为正确的宽度。
如果您希望条目与
LabelFrame
对齐,您可以将它们设为 sticky='WE'
。第 14 行和第 20 行看起来像这样:
# Line 14
entry_channelname.grid(row=0, column=1, sticky='WE')
# Line 20
entry_channelTopic.grid(row=1, column=1, pady=2, sticky='WE')