【问题标题】:Python Tkinter label not moving properlyPython Tkinter 标签未正确移动
【发布时间】: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() 中相同“正方形”中的小部件不会相互移开。

标签: python tkinter widget


【解决方案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() 方法的工作原理以及两者的可用选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多