2016-03-03 101 views
0

我想要做一些像figure1但我不明白什麼是錯的。當我運行代碼時,出現圖2,我希望它看起來像第一張圖片。有人能幫助我嗎 ?由於Figure1Figure2畫布和按鈕的位置蟒蛇

import math 
import Tkinter 
import tkMessageBox 
import Canvas 



main = Tkinter.Tk() 
main.geometry("1500x1000") 
main.title("Momentum") 
canvas = Tkinter.Canvas(main, width=1000, height =600) 
canvas.grid(row=0,column=0) 
box = canvas.create_rectangle(150,20,850,400) 

ol1= Tkinter.Label(main, text="Object A") 
ol2= Tkinter.Label(main,text="Object B") 
ml1 = Tkinter.Label(main, text ="MASS") 
ml2 = Tkinter.Label(main, text ="MASS") 
me1 = Tkinter.Entry(main) 
me2 = Tkinter.Entry(main) 
ol1.grid(row=550, column=300) 
ol2.grid(row=550, column=500) 
ml1.grid(row=600, column =300) 
ml2.grid(row =600, column =500) 
me1.grid(row=620, column =300) 
me2.grid(row=620, column=500) 





main.mainloop() 

回答

1

不可能給你一個完美的答案,因爲小部件的佈局不僅僅是知道小部件去哪裏。您還需要考慮Tkinter應該如何處理額外的空間,您還沒有指定。

問題的一部分是,你似乎認爲網格將爲行和空列分配空間,並且網格單元的大小是統一的。它不會,也不會。

您可以在第1行,第100行,第1000行或第100000行放置一些東西,如果所有其他行都爲空,它將在外觀上看起來相同。每行和每列可以是零像素高,1000像素高或任何其他您想要的大小。 Tkinter非常擅長計算行和列的高度和寬度,所以你不必爲自己做很多計算。具有正面重量的空行和列對填充物和間隔物非常有用。

總體而言,它看起來像所有你需要的是兩列,四或五行。我假設,畫布應該跨越兩列。

這裏有一些讓你開始。您可以使用行和列權重以及填充值來調整所有您想要的空白空間。

import Tkinter 

main = Tkinter.Tk() 
main.geometry("1500x1000") 
main.title("Momentum") 

main.grid_rowconfigure(5, weight=1) 
main.grid_columnconfigure(0, weight=1) 
main.grid_columnconfigure(1, weight=1) 

canvas = Tkinter.Canvas(main, width=1000, height=600) 
ol1= Tkinter.Label(main, text="Object A") 
ol2= Tkinter.Label(main,text="Object B") 
ml1 = Tkinter.Label(main, text ="MASS") 
ml2 = Tkinter.Label(main, text ="MASS") 
me1 = Tkinter.Entry(main) 
me2 = Tkinter.Entry(main) 

canvas.grid(row=0,column=0, columnspan=2) 
ol1.grid(row=1, column=0, pady=(0,20)) 
ol2.grid(row=1, column=1, pady=(0,20)) 
ml1.grid(row=2, column=0) 
ml2.grid(row=2, column=1) 
me1.grid(row=3, column=0) 
me2.grid(row=3, column=1) 

box = canvas.create_rectangle(150,20,850,400, outline="blue", fill="white") 

main.mainloop() 
+0

是的,非常感謝。最後一個問題,你能解釋什麼是pady,grid_rowconfigure/columnconfigure是如何工作的?再次感謝 –

+1

@AliBeyit:在互聯網上有大量的信息。從這裏開始:http://effbot.org/tkinterbook/grid.htm –

0

使用場所(),而不是網格()。

+0

我不知道如何使用它我擡頭看它,但沒能得到它可以幫助我嗎? –

+0

地方很少是正確的選擇。它可以讓你創建一個非常具體的佈局,但是如果你在具有不同分辨率或不同字體的系統上運行用戶界面,或者用戶調整了窗口大小,那麼佈局就不會很靈活。 –

1

使用行和列是非常直接的http://effbot.org/tkinterbook/grid.htm你應該發佈你試過的東西以及它爲什麼不是你想要的東西。

import Tkinter 

main = Tkinter.Tk() 
main.geometry("1500x1000") 
main.title("Momentum") 
canvas = Tkinter.Canvas(main, width=1000, height =600) 
canvas.grid(row=0,column=1, columnspan=2) 
box = canvas.create_rectangle(150,20,850,400) 

ol1= Tkinter.Label(main, text="Object A") 
ol2= Tkinter.Label(main,text="Object B") 
ml1 = Tkinter.Label(main, text ="MASS") 
ml2 = Tkinter.Label(main, text ="MASS") 
me1 = Tkinter.Entry(main) 
me2 = Tkinter.Entry(main) 
ol1.grid(row=1, column=1) 
ol2.grid(row=1, column=2) 
ml1.grid(row=2, column =1) 
ml2.grid(row =2, column = 2) 
me1.grid(row=3, column =1) 
me2.grid(row=3, column=2) 

main.mainloop()