首页 > 解决方案 > 如果有很多小部件,让按钮向左对齐

问题描述

我一直在尝试制作一个程序。当我有很多小部件时,我目前无法让所有按钮向左对齐。当我使用下面的代码时,它有很多小部件及其各种网格,我放置的按钮没有左对齐,我似乎找不到让它们左对齐的方法。

from tkinter import *
import tkinter as tk

def banana():
    print ("Sundae")
def tomato():
    print ("Ketchup")
def potato():
    print ("Potato chips")

root = tk.Tk()
root.geometry("960x600")

label_toptitle = tk.Label(root,
                          text="Program Name",
                          font=(None, 40),
)
label_toptitle.grid(row=0,
                    columnspan=3
                    )

description = "To create rhythm, press the red record button. While recording, use the clicked note button to\n create a series of rectangle notes on screen. They can be held to extend the rectangles. \n\n Once you are done, press the red stop button to stop recording"

pixel = tk.PhotoImage(width=1, height=1)
label_desc = tk.Label(root,
                      image=pixel,
                      compound="center",
                      width=900,
                      font=(None, 14),
                      padx=20,
                      pady=10,
                      text=description
                      )
                      #bd=1,
                      #relief="solid",

#label_desc.pack(side="top", fill="both")
label_desc.grid(row=1,
                columnspan=3,
                #sticky=E
                )

canvas = Canvas(width=960, height=400, bg='white')

canvas.grid(row=2,
            column=0,
            columnspan=3,
            #expand=YES,
            #fill=BOTH
            )

canvas.create_rectangle(70, 18, 888, 208, width=5, fill='pink')
canvas.create_rectangle(257, 268, 349, 357, width=5, fill='pink')
canvas.create_rectangle(430, 268, 520, 357, width=5, fill='pink')
canvas.create_rectangle(597, 268, 689, 357, width=5, fill='pink')

gridbutt = Label(root, text="", anchor=W)
gridbutt.grid(row=3, column=0, columnspan=3)

f1 = tk.Frame(root, width=70, height=30)
f2 = tk.Frame(root, width=70, height=30)
f3 = tk.Frame(root, width=70, height=30)

f1.grid(row=3, column=0)
f2.grid(row=3, column=1)
f3.grid(row=3, column=2)

button_qwer = Button(f1, text="asdfasdf", command=banana)
button_asdf = Button(f2, text="asdfasdf", command=tomato)
button_zxcv = Button(f3, text="asdfasdf", command=potato)

button_qwer.place(x=0, y=0, relwidth=1, relheight=1)
button_asdf.place(x=0, y=0, relwidth=1, relheight=1)
button_zxcv.place(x=0, y=0, relwidth=1, relheight=1)

root.mainloop()

但是当我尝试像下面这样放置少量代码时,按钮会像我期望的那样左对齐。

from tkinter import *
import tkinter as tk

root = tk.Tk()
root.geometry("960x600")

f1 = tk.Frame(root, width=70, height=30)
f2 = tk.Frame(root, width=70, height=30)
f3 = tk.Frame(root, width=70, height=30)

f1.grid(row=3, column=0)
f2.grid(row=3, column=1)
f3.grid(row=3, column=2)

button_qwer = Button(f1, text="asdfasdf")
button_asdf = Button(f2, text="asdfasdf")
button_zxcv = Button(f3, text="asdfasdf")

button_qwer.place(x=0, y=0, relwidth=1, relheight=1)
button_asdf.place(x=0, y=0, relwidth=1, relheight=1)
button_zxcv.place(x=0, y=0, relwidth=1, relheight=1)

root.mainloop()

我还尝试使用“锚”功能将按钮锚定到左侧,但它只会给出错误。我对框架做了同样的尝试,但也有错误。

如何让我的主程序的按钮与左侧对齐并像第二个程序默认情况下那样很好地向左聚集?

标签: pythonpython-3.xtkinter

解决方案


您将 3 个按钮放置在 3 个不同的框架中,并将它们划分为不同的列。在这里,我将所有 3 个按钮放在一个框架中,将它们打包到左侧,并在第 0 列中用 3 个按钮对单个框架进行网格化,并带有向西的粘性选项。

它产生与您的第二个代码示例相同的外观。

import tkinter as tk
from tkinter import PhotoImage

def banana():
    print ("Sundae")

def tomato():
    print ("Ketchup")

def potato():
    print ("Potato chips")


root = tk.Tk()
root.geometry("960x600")

label_toptitle = tk.Label(root, text="Program Name", font=(None, 40),)
label_toptitle.grid(row=0, columnspan=3)

description = "To create rhythm, press the red record button. While recording, use the clicked note button to\n create a series of rectangle notes on screen. They can be held to extend the rectangles. \n\n Once you are done, press the red stop button to stop recording"

pixel = PhotoImage(width=1, height=1)
label_desc = tk.Label(root, image=pixel, compound="center", width=900, font=(None, 14),
                      padx=20, pady=10, text=description)

label_desc.grid(row=1, columnspan=3)

canvas = tk.Canvas(width=960, height=400, bg='white')
canvas.grid(row=2, column=0, columnspan=3)

canvas.create_rectangle(70, 18, 888, 208, width=5, fill='pink')
canvas.create_rectangle(257, 268, 349, 357, width=5, fill='pink')
canvas.create_rectangle(430, 268, 520, 357, width=5, fill='pink')
canvas.create_rectangle(597, 268, 689, 357, width=5, fill='pink')

gridbutt = tk.Label(root, text="", anchor='w')
gridbutt.grid(row=3, column=0, columnspan=3)

f1 = tk.Frame(root, width=70, height=30)
f1.grid(row=3, column=0, sticky='W')

button_qwer = tk.Button(f1, text="asdfasdf", command=banana)
button_asdf = tk.Button(f1, text="asdfasdf", command=tomato)
button_zxcv = tk.Button(f1, text="asdfasdf", command=potato)

button_qwer.pack(side='left')
button_asdf.pack(side='left')
button_zxcv.pack(side='left')

root.mainloop()

推荐阅读