【问题标题】:How to center two frames in one window using tkinter?如何使用 tkinter 在一个窗口中居中两个框架?
【发布时间】:2020-11-20 21:02:28
【问题描述】:

我想做的就是将这个窗口的顶部框架居中,看起来应该非常简单,但一周后我仍然无法弄清楚。

我尝试将其从包更改为网格。我尝试过使用扩展、填充、粘性和侧面。它们都不能在任何迭代或组合中工作。

这里发生了什么导致它粘在屏幕左侧,我怎样才能让它居中?

Here is an image of the tkinter GUI

import tkinter as tk

root = tk.Tk()

frame1 = tk.Frame(root, bg='gold')
frame2 = tk.Frame(root)

frame1label = tk.Label(frame1, bg='gold', text='Top label')
frame1label.grid(row=0)

frame2label = tk.Label(frame2, text='Bottom label')
frame2label.pack()

frame1.pack(fill=tk.X)
frame2.pack()

root.mainloop()

【问题讨论】:

  • 顶框实际上填满了窗口的宽度。它只是放在左边的标签,因为使用了grid(row=0)。将grid(...) 更改为pack()
  • @acw1668 是的,这可行,但我需要一种方法将其居中,同时仍在第一个标签上使用网格
  • 然后添加frame1.columnconfigure(0, weight=1)

标签: python tkinter window frame center


【解决方案1】:

如果网格调整大小,您必须告诉小部件展开。你可以通过columnconfigure 做到这一点。使用sticky 参数,您可以告诉小部件如何 做出反应。看看这个网站上的Handling Resizehttps://tkdocs.com/tutorial/grid.html

import tkinter as tk

root = tk.Tk()

frame1 = tk.Frame(root, bg='gold')
frame1.pack(fill=tk.X)
frame1.columnconfigure(0, weight=1)
frame2 = tk.Frame(root)
frame2.pack()

frame1label1 = tk.Label(frame1, bg='gold', text='Top label')
frame1label1.grid(row=0, column=0)
frame2label = tk.Label(frame2, text='Bottom label')
frame2label.pack()

root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2016-11-17
    相关资源
    最近更新 更多