2024-03-28 12:57:10 发布
网友
我试图把一个大标签在窗口顶部的中间,然后3个选项菜单均匀地分布在它下面。我无法使菜单跨越整个窗口。我不确定我做错的是
root.geometry("800x600")
在底部。所有的东西都是均匀分布的,但都被推到窗户的左边,而不是填满整个东西。我还没有到下一部分,我将绑定函数,这些函数将在每个菜单下显示文本段落,这就是为什么我希望窗口如此大。在
这是我的代码:
函数内部的标签,如“1950年代的社会”等,将是大段。在
网格中的默认单元格没有大小。只能使用设置最小大小
root.columnconfigure(0, minsize=300) root.columnconfigure(1, minsize=300) root.columnconfigure(2, minsize=300)
要创建大标题,可以连接3个单元格
您也可以使用sticky='we'使用widget-to-cell-size
sticky='we'
网格(…,sticky='we')
w=west/left,e=east/right
w
west/left
e
east/right
工作示例:
import tkinter as tk # - functions - def fifties(selection): data = { "Intro": "1950's intro", "Political": "1950's politcal", "Economic": "1950's economic", "Social": "1950's social", "Technological": "1950's technological", "Aesthetic": "1950's aesthetic", } if selection in data: text_1950['text'] = data[selection] else: text_1950['text'] = "Unknow selection: " + selection def sixties(selection): data = { "Intro": "1960's intro", "Political": "1960's politcal", "Economic": "1960's economic", "Social": "1960's social", "Technological": "1960's technological", "Aesthetic": "1960's aesthetic", } if selection in data: text_1960['text'] = data[selection] else: text_1960['text'] = "Unknow selection: " + selection def seventies(selection): data = { "Intro": "1970's intro", "Political": "1970's politcal", "Economic": "1970's economic", "Social": "1970's social", "Technological": "1970's technological", "Aesthetic": "1970's aesthetic", } if selection in data: text_1970['text'] = data[selection] else: text_1970['text'] = "Unknow selection: " + selection # - main - # - init - root = tk.Tk() root.configure(bg="turquoise") root.geometry("900x600") # - set columns minimal size - root.columnconfigure(0, minsize=300) root.columnconfigure(1, minsize=300) root.columnconfigure(2, minsize=300) # - header - lbl = tk.Label(root, text="Pick a Decade", bg="turquoise", fg="hot pink", font=("Times", 40, "bold italic")) lbl.grid(column=0, row=0, columnspan=3, sticky='we') # - menus - options = ["Intro", "Political", "Economic", "Social", "Technological", "Aesthetic"] var = tk.StringVar(value="1950's") a = tk.OptionMenu(root, var, *options, command=fifties) a.grid(column=0, row=2, sticky='we') var = tk.StringVar(value="1960's") a = tk.OptionMenu(root, var, *options, command=sixties) a.grid(column=1, row=2, sticky='we') var = tk.StringVar(value="1970's") a = tk.OptionMenu(root, var, *options, command=seventies) a.grid(column=2, row=2, sticky='we') # - empty labels for text - text_1950 = tk.Label(root, bg="turquoise") text_1950.grid(column=0, row=3) text_1960 = tk.Label(root, bg="turquoise") text_1960.grid(column=1, row=3) text_1970 = tk.Label(root, bg="turquoise") text_1970.grid(column=2, row=3) # - start - root.mainloop()
grid几何图形管理器需要知道,如果空间超过显示小部件所需的空间,该怎么做。它通过分配相对于每行和每列的“权重”的额外空间来实现这一点。例如,如果一列的权重为3,而另一列的权重为1,则第一列的额外空间将是另一列的3倍。在
grid
默认情况下,行和列的权重为零。这意味着如果有额外的空间,如您的例子中,它将被闲置。在
对于您的问题,最简单的解决方案是给每列一个相等的非零权重,以便使额外的空间均匀分布。您可以使用columnconfigure(或grid_columnconfigure)方法来执行此操作:
columnconfigure
grid_columnconfigure
root.grid_columnconfigure(0, weight=1) root.grid_columnconfigure(1, weight=1) root.grid_columnconfigure(2, weight=1)
既然您希望标签跨越所有三列,那么您需要告诉grid,这可以通过将标签放在第0列中并给它一个3的columnspan来实现:
columnspan
网格中的默认单元格没有大小。只能使用设置最小大小
要创建大标题,可以连接3个单元格
^{pr2}$您也可以使用
sticky='we'
使用widget-to-cell-size网格(…,sticky='we')
w
=west/left
,e
=east/right
工作示例:
grid
几何图形管理器需要知道,如果空间超过显示小部件所需的空间,该怎么做。它通过分配相对于每行和每列的“权重”的额外空间来实现这一点。例如,如果一列的权重为3,而另一列的权重为1,则第一列的额外空间将是另一列的3倍。在默认情况下,行和列的权重为零。这意味着如果有额外的空间,如您的例子中,它将被闲置。在
对于您的问题,最简单的解决方案是给每列一个相等的非零权重,以便使额外的空间均匀分布。您可以使用
columnconfigure
(或grid_columnconfigure
)方法来执行此操作:既然您希望标签跨越所有三列,那么您需要告诉
^{pr2}$grid
,这可以通过将标签放在第0列中并给它一个3的columnspan
来实现:相关问题 更多 >
编程相关推荐