" Sticky"的不良行为在Tkinter Grid packer中

时间:2017-04-19 20:09:52

标签: python user-interface tkinter grid

我正在研究一个小实用程序。 我有tk pack系统的问题,我把整个系统改为tkinter grid packer。但我不能轻易地将小部件放在我想要的任何地方。粘性值不以意外方式应用或应用。或者我做错了。

以下代码有什么问题?

import tkinter as tk

root = tk.Tk()
var = tk.IntVar()
root.minsize(width=400, height=400)

root.resizable(width=True, height=True)
root.grid_propagate(0)

frame = tk.Frame(root,width=400, height=400, bg="cyan")
frame.grid()
frame.grid_propagate(0)

frame.grid_columnconfigure(0, weight=1)
frame.grid_columnconfigure(1, weight=1)

frame1 = tk.Frame(frame,width=200, height=100, bg="green")
frame2 = tk.Frame(frame,width=200, height=100, bg="blue")
frame3 = tk.Frame(frame,width=200, height=100, bg="yellow")
frame4 = tk.Frame(frame,width=200, height=100, bg="grey")
frame1.grid_propagate(0)
frame2.grid_propagate(0)
frame3.grid_propagate(0)
frame4.grid_propagate(0)

tk.Radiobutton(frame1 ,text="TEXT" ,variable=var ,value=1,indicatoron=0
    ,width=16 , height=1 ).grid(sticky=tk.N+tk.E+tk.W)
tk.Radiobutton(frame2 ,text="TEXT" ,variable=var ,value=2,indicatoron=0
    ,width=16 , height=1 ).grid(sticky=tk.N+tk.E+tk.W)
tk.Radiobutton(frame3 ,text="TEXT" ,variable=var ,value=3,indicatoron=0
    ,width=16 , height=1 ).grid(sticky=tk.N+tk.E+tk.W)
tk.Radiobutton(frame4 ,text="TEXT" ,variable=var ,value=4,indicatoron=0
    ,width=16 , height=1 ).grid(sticky=tk.N+tk.E+tk.W)

frame1.grid(row=0,column=0)
frame2.grid(row=0,column=1)
frame3.grid(row=1,column=0)
frame4.grid(row=1,column=1)

root.mainloop()

这是它的外观。 enter image description here

我希望这些按钮/单选按钮伸展到它们放置的框架的极限,因为我使用

grid(sticky=tk.N+tk.E+tk.W) .

但它没有用。

1 个答案:

答案 0 :(得分:0)

您已正确对frame中的行和列赋予权重,但您未在其他任何位置应用权重。当您在frame1中放置单选按钮时,它小于该帧。它是"坚持"到列零的边缘,但是列零没有配置为占用frame1中的所有空格。

添加这一行以观察其产生的差异:

frame1.grid_columnconfigure(0, weight=1)