Python Tkinter 标签未正确移动
Posted
技术标签:
【中文标题】Python Tkinter 标签未正确移动【英文标题】:Python Tkinter label not moving properly 【发布时间】:2021-12-02 09:10:13 【问题描述】:label = tk.Label(frame, text=app.split('/')[-1:][0] + "\n", bg="#1c1c1c",
padx=5, pady=5, font=("Helvetica 12 bold"), fg="white")
label.grid(row=0, column=0)
此代码应该生成标签(制作新标签是通过单独的函数完成的)并且标签应该从上到下,从窗口的左上角开始。我会使用label.pack()
但是label.pack()
只是让它从中间顶部到底部。这就是我使用label.grid(row=0, column=0)
的原因。但问题是新标签只是替换了先前存在的标签。有什么办法可以在仍然使用label.pack()
的同时修复移动标签?
完整的功能是 def addApps():
for widget in frame.winfo_children():
widget.destroy()
filename = filedialog.askopenfilename(initialdir="/", title="Select File",
filetypes= (("executables", "*.exe"), ("All files", "*.*")))
filename.split('/')[-1:][0]
apps.append(filename)
print("filename, apps")
for app in apps:
label = tk.Label(frame, text=app.split('/')[-1:][0] + "\n", bg="#1c1c1c",
padx=5, pady=5, font=("Helvetica 12 bold"), fg="white")
label.grid(row=0, column=0)
【问题讨论】:
请提供说明问题的minimal reproducible example。您显示的代码仅在窗口的一个位置创建一个标签。 但这就是我的问题所在。 我在您的代码中没有看到您正在移动小部件的任何地方。您只是将它们全部放在同一行和同一列中。 如果您想主动移动小部件(如动画),我强烈建议使用tkinter.Canvas
而不是调用.pack()
或.grid()
。当您在与前一个相同的位置(在本例中为row=0, column=0
)网格化一个小部件时,它将替换它。 grid()
中相同“正方形”中的小部件不会相互移开。
【参考方案1】:
正如 Bryan 所说,您只是将标签放在一起。因为您不更改行或列坐标,所以标签堆叠在一起,最后放置的标签就是您将在顶部看到的标签。您需要更改grid()
中的行来堆叠它们。
以下示例使用grid()
和pack()
从上到下堆叠标签,向左对齐
网格:
for label_row, app in enumerate(apps):
label = tk.Label(frame, text=app.split('/')[-1:][0] + "\n", bg="#1c1c1c",
padx=5, pady=5, font=("Helvetica 12 bold"), fg="white")
label.grid(row=label_row, column=0, sticky = tk.NW)
包装:
for app in apps:
label = tk.Label(frame, text=app.split('/')[-1:][0] + "\n", bg="#1c1c1c",
padx=5, pady=5, font=("Helvetica 12 bold"), fg="white")
label.pack(anchor = tk.NW)
我建议您查看 grid()
和 pack()
方法的工作原理以及两者的可用选项。
【讨论】:
以上是关于Python Tkinter 标签未正确移动的主要内容,如果未能解决你的问题,请参考以下文章