【问题标题】:Aligning widgets in a grid Tkinter window在网格 Tkinter 窗口中对齐小部件
【发布时间】:2021-09-03 06:02:55
【问题描述】:

我想在 Tkinter 创建的窗口中居中对齐我的所有小部件。我所有的小部件都使用网格几何系统。我已经尝试过列和行权重,但它们不适用于我没有明确设置的行和列。我还尝试将整个窗口包装在一个框架中并使用 grid(sticky=NSEW) 但它没有任何区别。对于我的用例,我有超过 50 行/列,我不想对它们中的每一个运行权重设置。 这是我目前所拥有的:

root = Tk()
root.minsize(500, 100)
root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)
root.rowconfigure(2, weight=1)
root.columnconfigure(2, weight=1)
root.title('123')
root.iconbitmap(get_res_path('icon.ico'))

status_bar = LabelFrame(root, bd=1, relief=SUNKEN)
status_bar.grid(row=1, column=0, sticky=EW)
status_bar.rowconfigure(1, weight=1)
status_bar.columnconfigure(1, weight=1)
testing_text = Label(status_bar, text='', anchor=W)
testing_text.grid(row=0, column=0, sticky=W)
status_text = Label(status_bar, text='Initializing', anchor=E)
status_text.grid(row=0, column=1, sticky=E)

ver_msg = Label(root, text='123')
ver_msg.grid(row=0, column=0)
Frame(root).pack()

我希望窗口中的每个元素(文本、输入框和按钮)都位于窗口的中间,如果我将窗口拖得更大,它能够自行调整以保持在中间.

我看到了很多问题,但没有一个给我一个有效的答案。

【问题讨论】:

  • 也许把所有东西都放在一个框架内,然后在框架上使用pack() 可能会起作用
  • _tkinter.TclError: cannot use geometry manager grid inside 。已经有由 pack 管理的 slave
  • 是的,发布一些代码,这样我就可以知道这里发生了什么
  • 'root = Tk() root.minsize(500, 100) root.rowconfigure(0, weight=1) root.columnconfigure(0, weight=1) root.rowconfigure(2, weight= 1) root.columnconfigure(2, weight=1) Frame(root).grid(row=1, column=1, sticky=NSEW)'
  • 哦,谢谢你的提示!我让它按我的意愿工作。是否要将您的 cmets 转换为答案,以便我可以将其标记为已接受的答案?

标签: python tkinter alignment


【解决方案1】:

我能想到的让整个应用居中的最简单方法是将整个小部件放在一个框架内,然后在主框架上使用pack(),例如:

frame = Frame(root)
frame.pack()

Button(frame, text='This is a button').grid(row=0,column=0)
Label(frame, text='This is a label').grid(row=1,column=0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    相关资源
    最近更新 更多