python - 如何对齐相邻行tkinter中的单选按钮?
问题描述
我正在用 Python tkinter 制作一个 GUI。我怎样才能对齐这些 Raidobuttons 以便它们都排成一列并且这些列并排。特别是我希望我的列是左右居中的,但现在它们是这样显示的:
这是我的单选按钮代码:
selected_device = StringVar()
devices = ['CAN', 'US', 'EU', 'AU']
for device in devices:
r = Radiobutton(
root,
text=device,
value=device,
variable=selected_device
)
r.pack(anchor="ne")
selected_source = StringVar()
sources = ['Raw Data', 'Encoded Data']
for source in sources:
r = Radiobutton(
root,
text=source,
value=source,
variable=selected_source
)
r.pack(anchor="nw")
selected_environment = StringVar()
environments = ['Sprint', 'RC', 'Staging']
for environment in environments:
r = Radiobutton(
root,
text=environment,
value=environment,
variable=selected_environment
)
r.pack(anchor="n")
解决方案
我希望我的列是左右居中的,但现在它们是这样显示的:
如果是这种情况,并且您想继续使用pack
,最简单的解决方案是创建三个框架,一个用于左侧,一个用于右侧,一个用于中心。那,或者切换到使用grid
三列。
使用pack
创建三个框架,并使用anchor="w"
使按钮对齐到框架的左侧。
left_frame = Frame(root)
middle_frame = Frame(root)
right_frame = Frame(root)
left_frame.pack(side="left", fill="both", expand=True)
middle_frame.pack(side="left", fill="both", expand=True)
right_frame.pack(side="right", fill="both", expand=True)
for device in devices:
r = Radiobutton(right_frame, ...)
r.pack(side="top", anchor="w")
...
for source in sources:
r = Radiobutton(left_frame, ...)
r.pack(side="top", anchor="w")
...
for environment in environments:
r = Radiobutton(middle_frame, ...)
r.pack(side="top", anchor="w")
使用grid
由于您要创建三列布局,grid
因此可能是更好的选择。关键是为所有三列赋予相同的权重,以便平均分配额外的空间。您还可以使用该uniform
选项来确保它们的宽度完全相同。
在这种情况下,我建议为单选按钮使用单个框架,以便它们的布局独立于 UI 的其余部分。
radio_frame = Frame(root)
radio_frame.pack(side="top", fill="both", expand=True)
radio_frame.grid_columnconfigure((0,1,2), weight=1, uniform="equal")
for row, device in enumerate(devices):
r = Radiobutton(radio_frame, ...)
r.grid(row=row, column=0, sticky="w")
...
for row, source in enumerate(sources):
r = Radiobutton(radio_frame, ...)
r.grid(row=row, column=1, sticky="w")
...
for row, environment in enumerate(environments):
r = Radiobutton(radio_frame, ...)
r.grid(row=row, column=2, sticky="w")
推荐阅读
- php - 在 $html_body 中分配时,PHP 代码不呈现在 HTML 中
- kubernetes - 当我尝试构建我的角度代码时 OutOfMemoryKilled
- c++ - 我应该把我的枚举放在我的 int main() 里面还是里面?
- r - 无法拆分日期时间列而不将其转换为字符
- python - Django 在其 __init__ 函数中使用 ORM 查询中的对象
- google-cloud-platform - 如何以 CSV 格式将数据从 Bigquery 导出到外部服务器?
- python - 如何在 Python 中从 JSON 获取嵌套字典
- python - 如何为 Sqlalchemy 使用类
- rest - 通过 Rest API 将记录插入自定义表
- asp.net-mvc - 如何通过asp.net mvc返回最大值