【问题标题】:tkinter align button within frame with grid()tkinter 用 grid() 对齐框架内的按钮
【发布时间】:2021-09-19 14:17:47
【问题描述】:

我正在创建小型暂存器应用程序。整个应用程序是单列和 3 行。第 0 行将有一个向右对齐的关闭按钮,第 1 行是文本区域,第 2 行将有几个按钮来格式化文本 + 1 按钮来删除/清除文本区域。我希望删除/清除按钮向右对齐,而其余按钮向左对齐,这样格式按钮和删除按钮之间就有一个空格。这样您就不会意外清除文本。代码如下:

import tkinter as tk
from tkinter import ttk

wn = tk.Tk()
wn.attributes('-type', 'splash')
style = ttk.Style()
style.configure('top.TFrame', border=0, borderwidth=0, background='green')
style.configure('bottom.TFrame', border=0, borderwidth=0, background='blue')
style.configure('button.TButton', border=5, borderwidth=5, background='#e6e497', bd=5)

root = ttk.Frame(wn, style='top.TFrame', borderwidth=5, relief='ridge')
button = ttk.Button(root, text='X', width=3, command=lambda: wn.destroy(), style='button.TButton')
txt = tk.Text(root, width=40, background='light yellow', bd=5)

bottom = ttk.Frame(root, style='bottom.TFrame', width=2000, borderwidth=5, relief='ridge')
bottombuttona = ttk.Button(bottom, width=3, text='A')
bottombuttonb = ttk.Button(bottom, width=3, text='B')
bottombuttonc = ttk.Button(bottom, width=3, text='C')
bottombuttond = ttk.Button(bottom, width=3, text='D')
bottombuttone = ttk.Button(bottom, width=3, text='E')

root.grid()
button.grid(column=0, row=0, sticky=tk.E, ipady=4)
txt.grid(column=0, row=1, sticky=tk.NSEW)
bottom.grid(column=0, row=2, sticky=tk.NSEW)

bottombuttona.grid(column=0, row=2, ipady=5)
bottombuttonb.grid(column=1, row=2, ipady=5)
bottombuttonc.grid(column=2, row=2, ipady=5)
bottombuttond.grid(column=3, row=2, ipady=5)
bottombuttone.grid(column=4, row=2, ipady=5, sticky=tk.E)

txt.focus_force()
wn.bind('<Escape>', lambda x: wn.destroy())
wn.mainloop()

这是结果:

问题:如何将bottombuttone (E) 移动到它所在的bottom 框架的右侧(蓝色)? sticky 似乎不起作用

次要问题:Frame 类中的width 选项的目的是什么?尽管将其设置为 2000,但似乎对框架本身的大小没有任何影响。

【问题讨论】:

    标签: python tkinter ttk


    【解决方案1】:

    您可以使用grid_columnconfigure 让它工作:

    ...
    bottombuttond.grid(column=3, row=2, ipady=5)
    bottom.grid_columnconfigure(4, weight = 1)
    bottombuttone.grid(column=4, row=2, ipady=5, sticky=tk.E)
    ...
    

    将最后一项的权重设置为 1 允许它扩展以填充其父项。使用sticky = tk.E,它将粘在其父级的右侧。

    我这样做是为了演示网格权重是如何工作的。蓝色是父部件,C1-3 是子部件。

    【讨论】:

    • 谢谢!现在我开始理解布局概念了。
    • 很高兴我能帮上忙 :)
    • 我还有一个小问题。当您单击一个按钮时,它周围会出现一个灰色的虚线边框(在 ubuntu 20.04 上)。你碰巧知道如何禁用它吗?我找不到适合的样式的选项
    • this 有帮助吗?
    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 2021-01-20
    • 2019-11-17
    • 2020-03-11
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多