2014-11-03 134 views
-1

我正在創建一個GUI,其中我有一個TextBox和幾個Button s。使用Tkinter的Python GUI - 小部件定位不正確

問題是,佈局似乎是混亂的。當我增加行數以便我能夠很好地分隔空間時,它沒有任何區別。我不確定我犯了什麼錯誤。

代碼:

from Tkinter import * 
from tkFileDialog import * 

gui = Tk() #create an object 
gui.title("xyz") 
gui.geometry("900x300") 

GuiLabel1 = Label(gui,text="hi everyone!!!!!!") 
GuiLabel1.grid(row=0, column=0) 
GuiLabel2 = Label(gui,text="File") 
GuiLabel2.grid(row=1, column=0) 


bar=Entry(gui) 
bar.grid(row=1, column=1) 



button1= Button(gui, text="Browse") 
button1.grid(row=1, column=2) 
button2= Button(gui, text="Process") 
button2.grid(row=2, column=2) 

button3= Button(gui, text="ABC") 
button3.grid(row=3, column=0) 

button4= Button(gui, text="ABC") 
button4.grid(row=3, column=1) 

button5= Button(gui, text="ABC") 
button5.grid(row=3, column=2) 

button6= Button(gui, text="ABC") 
button6.grid(row=3, column=3) 

button7= Button(gui, text="ABC") 
button7.grid(row=3, column=4) 


gui.mainloop() 

請參見下面的圖像的圖形用戶界面的截圖:

screenshot of the GUI

+2

究竟做*「炒」 *是什麼意思?該輸出看起來很像我期望的。空行默認壓縮到零高度;如果你想填充,添加填充。 – jonrsharpe 2014-11-03 16:07:09

+0

從某種意義上說,這些小工具並沒有按照有序的方式定位。就像第二個ABC並不完全在第一個旁邊。我需要在流程按鈕下方的空行。 ABC的間距不相等!!!!!!!!!! – blackfury 2014-11-03 16:35:29

+0

然後,您需要向Tkinter提供更多關於如何佈置小部件的信息(行和列大小,填充,單元格中每個小部件應該定位的位置等)。默認情況下,每行和每列都被自動調整以適合最大的窗口部件,因此第一列的寬度與'Label'的寬度相同,第二列的寬度與最大的'Button'寬度相同(第二寬度爲「TextBox」一個具有最廣泛的「文本」),等等......這就是「網格」所做的 - 將小部件放入網格中。 *(另外,請注意,一個感嘆號通常(超過)足夠。)* – jonrsharpe 2014-11-03 16:37:25

回答

0

您可以使用「WIDTH =」參數來均勻地間隔開的小部件看到http://effbot.org/tkinterbook/button.htm和行/ columnconfigure顯示空行/列

from Tkinter import * 

gui = Tk() #create an object 
gui.title("xyz") 
gui.geometry("900x300") 

GuiLabel1 = Label(gui,text="hi everyone!!!!!!") 
GuiLabel1.grid(row=0, column=0) 

GuiLabel2 = Label(gui,text="File") 
GuiLabel2.grid(row=3, column=0) 

bar=Entry(gui) 
bar.grid(row=1, column=1) 

button1= Button(gui, text="Browse", width=test_width) 
button1.grid(row=1, column=2) 
button2= Button(gui, text="Process", width=test_width) 
button2.grid(row=2, column=2) 

test_width=20 
for ctr in range(4): 
    button= Button(gui, text="ABC"+str(ctr+1), width=test_width) 
    button.grid(row=3, column=ctr) 

## empty column between 
gui.columnconfigure(4, minsize=50) 
button7= Button(gui, text="ABC") 
button7.grid(row=3, column=5) 

gui.mainloop() 
-3

我想你可能會尋找的

pack() 
grid() 

混合還有元素Frame,它允許你'組'elem其中的一些元素被視爲一個元素。

我無法修復你的代碼,但我建議你看看這些,並嘗試一下。

+1

混合'grid'和'pack'是一個可怕的想法,並且經常導致無限循環(請參閱http://stackoverflow.com /一個/3001761分之3968033)。 – jonrsharpe 2014-11-03 17:24:48

+0

如果你不是在同一個主人做的話,你可以把它混合起來。感謝您的鏈接,我曾經想過。 – User 2014-11-03 17:34:30

+0

考慮到OP *不是*使用多個主人,這可能值得非常清楚,你不覺得嗎? – jonrsharpe 2014-11-03 17:35:21

1

這些小工具看起來非常像您告訴他們出現的。問題是,你依靠很多的定位默認值,這可能是爲什麼他們沒有按照你認爲他們應該的方式出現在屏幕上。

當您使用網格時,您應該幾乎總是包含sticky選項來定義窗口小部件將如何填充它所放置的單元格。您經常需要使用填充來增加該窗格。最後,你通常應該給予至少一行和一列非零權重。

另外,請記住您正在創建網格。如果網格中有一個非常寬的項目,那將導致整個列變寬。如果將較小的項目放在後續行中,它們將默認以該列爲中心。