2017-04-19 45 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_框架或窗口,您應該給至少一行和一列賦予非零權重。 –