2016-03-03 93 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()