画布和按钮Python的位置

时间:2016-03-03 20:58:55

标签: python python-2.7 canvas tkinter tkinter-canvas

我正在尝试做类似figure1的事情,但我不明白出了什么问题。当我运行代码图2出现时,我希望它看起来像第一张图片。有谁可以帮助我吗 ?感谢Figure1 Figure2

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

3 个答案:

答案 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()

答案 1 :(得分: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()

答案 2 :(得分:0)

使用place()而不是grid()。