python - 如果有很多小部件,让按钮向左对齐
问题描述
我一直在尝试制作一个程序。当我有很多小部件时,我目前无法让所有按钮向左对齐。当我使用下面的代码时,它有很多小部件及其各种网格,我放置的按钮没有左对齐,我似乎找不到让它们左对齐的方法。
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()
推荐阅读
- selenium-webdriver - 是否可以使用 selenium chromedriver 检查网站上脚本的执行情况?
- c# - 我收到此错误 CS0400 在全局命名空间中找不到类型或命名空间名称“AjaxControlToolkit”(您是否缺少程序集参考。)
- python - 有人能告诉我解决这个 zigag 遍历问题的时间复杂度吗
- xml - 属性值中不允许未转义的“<”
- cuda - 使用 Numba 进行矩阵乘法时出现 CUDA 内存不足错误
- spring-boot - 反向代理后面的外部密钥斗篷服务器和 Spring Boot 应用程序 - 成功登录后重定向到根上下文
- conv-neural-network - 我可以将音频转换为 MFCC 作为 RGB 图像,然后使用 CNN 中的图像进行音频分类吗
- javascript - Discord.js/Cron - 在特定时间发送多条消息
- python - Selenium如何根据网格坐标获取网格中的单元格值
- windows - 如何在 Windows 中取回普通的旧“分段错误”消息?