python - 如果有很多小部件,则使按钮向左对齐

标签 python python-3.x tkinter

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

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()

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

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

最佳答案

您将 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()

关于python - 如果有很多小部件,则使按钮向左对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52249421/

相关文章:

python - 计算两个日期之间的差异,不包括 python 中的周末?

python - 如何检查代码运行是直接通过文件运行还是通过导入Python中的其他文件运行?

python - 需要更改大写 python 来解释 3 种不同类型的输入,与 raw_input 函数相同

python - 从模块调用未定义的方法

python - 从 python 中的数据框中创建两列的 python 对列表

python - 是否有任何理由不在 Python 中混合使用多处理和线程模块

python - 如何在python中编写n次函数

python - 为什么 TKinter OptionMenu 改变其父级的大小?

Python:Tkinter 接受的位图和图标

python - 为什么 python list 将每个字符存储在 BeautifulSoup 标签中?