アプリ版:「スタンプのみでお礼する」機能のリリースについて

次の---以下のようにPython物理の斜方投射のプログラムができて
目盛り線とx軸、y軸を追加できたのですが、
目盛りに数値を画像のように入れたいと思っていますが、
どういうコードを書けば数値を軸の周り(目盛り線の近く)に配置できますでしょうか?
画像はペイントで数値を文字枠で入れているだけです。
数値を入れるのをコードで表現したいです。

-----------------------------
tkinterとmathをインポートして
def move():からwindow.after(50, move)までインデントしています。

def move():
global x
global y
global vy
global t

canvas.delete('ball')
canvas.create_oval(x-MARGIN, (HEIGHT-y)-MARGIN, x+MARGIN, (HEIGHT-y)+MARGIN, fill='red', tags='ball')

for i in range(1, 60):
canvas.create_line(0, i * 10,800, i * 10, fill = '#000000' if i==30 else '#d2d2d2')
for i in range(1, 80):
canvas.create_line(i * 10, 0, i * 10,600, fill = '#000000' if i==1 else '#d2d2d2')

if 0 <= x and x <= WIDTH and 0 <= y and y <= HEIGHT:
x = x + vx0 * dt
v1 = vy
v2 = vy - g * dt
y = y + (v1+ v2) / 2.0 * dt
vy = v2
t = t + dt
else:
x = x0
y = y0
vy = vy0
t = t0

window.after(50, move)


#WIDTH, HEIGHT = 1000, 500
WIDTH, HEIGHT = 800, 600
MARGIN = 10

t0 = 0.0
dt = 0.1
g = 9.8

v0 = float(input('初速度を入力してください'))
degrees = float(input('角度を入力してください'))

theta = degrees * math.pi / 180
vx0 = v0 * math.cos(theta)
vy0 = v0 * math.sin(theta)
x0 = 10
y0 = 2 * HEIGHT / 4
x = x0
y = y0
vy = vy0
t = t0

geo_str = str(WIDTH+MARGIN*2) + 'x' + str(HEIGHT+MARGIN*2)
window = tkinter.Tk()
window.geometry(geo_str)
window.title('moving')

canvas = tkinter.Canvas(window, width=WIDTH, height=HEIGHT, bg='white')
canvas.place(x=MARGIN, y=MARGIN)
canvas.create_oval(x-MARGIN, (HEIGHT-y)-MARGIN, x+MARGIN, (HEIGHT-y)+MARGIN, fill='red', tags='ball')

move()
window.mainloop()

「物理の斜方投射で目盛りに数値を入れたい」の質問画像

A 回答 (2件)

> 解答大変有難うございます。


> if i>1 and (i-1)%5==0:
> canvas.create_text(i*10,310,text=f'{(i-1)*10}')
> を追加しましたが、実行できましたがテキストが描画されませんでした。
> どこか間違えていますでしょうか?

おかしいな。
コードはこうなってる?

https://www.ideone.com/h3qbCE

Linuxだと問題ないんだけど、Windowsだとひょっとしたらtkinterがcreate_textする際にフォントを指定しないとダメ、とかあるかもしんない。

tkinter超入門【第23回 キャンバス⑦~テキスト】:
https://mulberrytassel.com/tkinter-start-23/
「物理の斜方投射で目盛りに数値を入れたい」の回答画像2
    • good
    • 0
この回答へのお礼

ideone.comで教えて頂いて大変有難うございます。
できました!
なぜか「まだベストアンサーは選べません」となっておりますが、後でBAさせていただきます。
自力で
canvas.create_text(60, 310,text="50",font=("", 10))
などと追加していってもできました。
大変お世話になりました。

お礼日時:2023/05/27 19:09

縦軸の描画部分を次のように改造する。



for i in range(1, 80):
 canvas.create_line(i * 10, 0, i * 10, 600,
          fill = '#000000' if i == 1 else '#d2d2d2')
 # 縦軸を描画する際、条件に一致すればテキストも描画する
 if i > 1 and (i - 1) % 5 == 0:
  canvas.create_text(i * 10, 310, text = f'{(i - 1) * 10}')
    • good
    • 0
この回答へのお礼

解答大変有難うございます。
if i>1 and (i-1)%5==0:
canvas.create_text(i*10,310,text=f'{(i-1)*10}')
を追加しましたが、実行できましたがテキストが描画されませんでした。
どこか間違えていますでしょうか?

お礼日時:2023/05/27 17:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!