canvas 和按钮 Python 的位置
Positions of canvas and buttons Python
我正在尝试做类似图 1 的操作,但我不明白哪里出了问题。当我 运行 代码图 2 出现时,我希望它看起来像第一张图片。有谁可以帮助我吗 ?谢谢
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()
使用 place() 而不是 grid()。
使用行和列非常简单http://effbot.org/tkinterbook/grid.htm你应该post你还尝试了什么,为什么它不是你想要的。
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()
不可能给您一个完美的答案,因为小部件布局不仅仅涉及了解小部件的位置。您还需要考虑 Tkinter 应该如何处理您未指定的额外 space。
部分问题是您似乎认为网格会为空的行和列分配 space,并且网格单元格的大小是均匀的。它不会,他们也不会。
您可以在第 1 行、第 100 行、第 1000 行或第 100000 行放置一些东西,如果所有其他行都是空的,它在视觉上看起来是一样的。每行和每列的高度可以是零像素、1000 像素或您想要的任何其他大小。 Tkinter 非常擅长计算行和列的高度和宽度,因此您不必自己做太多计算。具有正权重的空行和列对于填充符和 spacers 很有用。
总的来说,您似乎只需要两列,四五行。我假设 canvas 应该跨越两列。
这里有一些可以帮助您入门的东西。您可以使用行和列的权重以及填充值来根据自己的喜好调整所有空的 space。
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()
我正在尝试做类似图 1 的操作,但我不明白哪里出了问题。当我 运行 代码图 2 出现时,我希望它看起来像第一张图片。有谁可以帮助我吗 ?谢谢
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()
使用 place() 而不是 grid()。
使用行和列非常简单http://effbot.org/tkinterbook/grid.htm你应该post你还尝试了什么,为什么它不是你想要的。
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()
不可能给您一个完美的答案,因为小部件布局不仅仅涉及了解小部件的位置。您还需要考虑 Tkinter 应该如何处理您未指定的额外 space。
部分问题是您似乎认为网格会为空的行和列分配 space,并且网格单元格的大小是均匀的。它不会,他们也不会。
您可以在第 1 行、第 100 行、第 1000 行或第 100000 行放置一些东西,如果所有其他行都是空的,它在视觉上看起来是一样的。每行和每列的高度可以是零像素、1000 像素或您想要的任何其他大小。 Tkinter 非常擅长计算行和列的高度和宽度,因此您不必自己做太多计算。具有正权重的空行和列对于填充符和 spacers 很有用。
总的来说,您似乎只需要两列,四五行。我假设 canvas 应该跨越两列。
这里有一些可以帮助您入门的东西。您可以使用行和列的权重以及填充值来根据自己的喜好调整所有空的 space。
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()