【问题标题】:Utilizing Tkinter's Grid Manager to Center Buttons But also Fill Entire Frame利用 Tkinter 的 Grid Manager 将按钮居中并填充整个框架
【发布时间】:2019-11-17 11:22:16
【问题描述】:

我正在使用 Tkinter 设计一个对话框。我想要的东西之一是一组做某事的按钮。我想将这些添加到我创建的框架中,但遇到了麻烦。我希望框架显示背景颜色,并且按钮在该框架中居中。现在,我只能弄清楚如何做一个或另一个。如果我在框架的网格位置中包含sticky=N+S+E+W,则整个框架都被背景颜色填充,但按钮被卡在左上角。如果我不包括粘性,按钮居中精美,但您只能看到背景颜色的一小部分。

你怎样才能让这两件事都发生?

非常感谢。这是我的代码:


from tkinter import *

def clearA():
    pass

root = Tk()
root.geometry("800x400")

for r in range(2):
    root.rowconfigure(r, weight=1)
for c in range(5):
    root.columnconfigure(c, weight=1)

clearButtonsFrame = Frame(root, bg='#E0EEEE')
clearButtonsFrame.grid(row = 0, column = 0, rowspan = 3, columnspan = 6, sticky=N+E+S+W)


clearButton = Button(clearButtonsFrame, text="Button 1", width=40)
clearButton.grid(row =0, column=0, padx=10)

selectButton = Button(clearButtonsFrame, text="Button 2", width=40)
selectButton.grid(row =0, column=1)


root.mainloop()

【问题讨论】:

    标签: python tkinter grid


    【解决方案1】:
    from tkinter import *
    
    def clearA():
        pass
    
    root = Tk()
    root.geometry("800x400")
    root.configure(background='lightblue')  # You can configure background color
    
    for r in range(2):
        root.rowconfigure(r, weight=1)
    for c in range(5):
        root.columnconfigure(c, weight=1)
    
    clearButtonsFrame = Frame(root, bg='#E0EEEE')
    clearButtonsFrame.grid(row = 0, column = 0, rowspan = 3, columnspan = 6)
    
    
    clearButton = Button(clearButtonsFrame, text="Button 1", width=40)
    clearButton.grid(row =0, column=0, padx=10)
    
    selectButton = Button(clearButtonsFrame, text="Button 2", width=40)
    selectButton.grid(row =0, column=1)
    
    
    root.mainloop()
    

    您可以使用 root.configure(background='whatever color') 来配置背景颜色。我已经删除了 N+E+S+W 并且只添加了配置行,这样背景颜色就会保持不变并且按钮居中。

    【讨论】:

      【解决方案2】:

      您可能使事情变得有点复杂。

      按钮在它们自己的框架中;您要做的是(1)确保按钮垂直居中,并在该框架中相对于中心放置在每一侧。 (2) 您必须确保框架填满将要放入的容器,而不是围绕其小部件收缩。

      我建议 pack 根内的框架,使用 kwargs expand=Truefill=tk.BOTH 来实现 (2)。您可以将网格用于更复杂的布局,但在提供的示例中,这不是必需的。

      在框架内,您可以使用anchor=tk.CENTERplace相对于中心的按钮,在垂直方向上的一半rely=0.5,在左半边居中,在水平方向上右半边relx=0.25relx=0.75

      您现在可以调整root 的大小,按钮的比例布局将保持不变。

      import tkinter as tk
      
      root = tk.Tk()
      root.geometry("800x400")
      
      clearButtonsFrame = tk.Frame(root, bg='cyan')
      clearButtonsFrame.pack(expand=True, fill='both')
      
      clearButton = tk.Button(clearButtonsFrame, text="Button 1", width=40)
      clearButton.place(relx=0.25, rely=0.5, anchor=tk.CENTER)
      
      selectButton = tk.Button(clearButtonsFrame, text="Button 2", width=40)
      selectButton.place(relx=0.75, rely=0.5, anchor=tk.CENTER)
      
      root.mainloop()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-14
        • 1970-01-01
        • 2020-05-22
        • 2020-01-04
        • 1970-01-01
        相关资源
        最近更新 更多