2017-04-19 17 views
0

我正在研究一个小实用工具。 我有tk pack system的问题,我把整个系统改成tkinter grid packer。但我无法轻松地将小部​​件放在任何我想要的地方。粘性值不会以意想不到的方式应用或应用。或者我做错了什么。Tkinter网格包装器中“粘滞”的内部行为

下面的代码有什么问题?

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) . 

但它不工作。

回答

0

您已正确给予frame中的行和列的权重,但您并未在其他地方应用权重。当您在frame1中放置单选按钮时,它比该框架要小。它“粘到”零列的边缘,但列零未配置为占用frame1中的所有空间。

添加这一条线来观察它使不同:

frame1.grid_columnconfigure(0, weight=1) 
+0

但是S中要给点上,我已经给布局网格中已经小部件的权重?这不切实际吗? – user7685914

+0

这是真的工作..我想我有理解逻辑的问题..谢谢你布赖恩... – user7685914

+0

@ user7685914:包含其他小部件使用'grid'的每个小部件使用完全不同的网格配置。赋予父项的权重不会影响嵌套在内部的小部件的列的行。经验法则是,对于使用网格来管理其直接子元素的_every_框架或窗口,您应该给至少一行和一列赋予非零权重。 –