限定しりとり

以下のプログラムはPythonでせん断応力図、曲げモーメント図を表示させたいだけなのですが、
実行するとすぐウィンドウが落ちてしまいます。
どこをどう修正すれば良いか教えて頂けますか?

import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np
import matplotlib.pyplot as plt

# 梁の長さと荷重
L = 10 # 梁の長さ
P = 1000 # 集中荷重

# せん断応力と曲げモーメントの計算
x = np.linspace(0, L, 500)
V = np.piecewise(x, [x < L/2, x >= L/2], [P/2, -P/2]) # せん断応力
M = np.piecewise(x, [x < L/2, x >= L/2], [P*x/2, P*(L-x)/2]) # 曲げモーメント

# プロットの作成
fig, axs = plt.subplots(3, 1, figsize=(10, 8), sharex=True)

# 梁のイラスト
axs[0].plot([0, L], [0, 0], 'k-', linewidth=2)
axs[0].set_title('梁のイラスト')
axs[0].set_xlim(-1, L+1)
axs[0].set_ylim(-1, 1)
axs[0].set_yticks([])
axs[0].set_xticks([])
axs[0].annotate('荷重 P', xy=(L/2, 0), xytext=(L/2, 0.5),
arrowprops=dict(facecolor='black', shrink=0.05))

# せん断応力図
axs[1].plot(x, V, 'b-', label='せん断応力')
axs[1].set_title('せん断応力図')
axs[1].set_ylabel('せん断応力 [N]')
axs[1].grid(True)
axs[1].legend()

# 曲げモーメント図
axs[2].plot(x, M, 'r-', label='曲げモーメント')
axs[2].set_title('曲げモーメント図')
axs[2].set_xlabel('梁の位置 [m]')
axs[2].set_ylabel('曲げモーメント [Nm]')
axs[2].grid(True)
axs[2].legend()

plt.tight_layout()

# Tkinterウィンドウの設定
root = tk.Tk()
root.title("単純はりのせん断応力図と曲げモーメント図")

# MatplotlibのFigureをCanvasに埋め込む
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

# 終了ボタンの設定
def on_closing():
root.quit()
root.destroy()

root.protocol("WM_DELETE_WINDOW", on_closing)
tk.Button(root, text="終了", command=on_closing).pack(side=tk.BOTTOM)

root.mainloop()

A 回答 (2件)

Windows 11のanacondaで試したらDLLload errorでimagingが見つからないと言われたのでanacondaをupdateしました。

そうしたらこんどはM = np.piecewise(x, [x < L/2, x >= L/2], [P*x/2, P*(L-x)/2])がerrorになったので以下のように

np.where(x < L/2, P/2, -P/2)
np.where(x < L/2, P*x/2, P*(L-x)/2)

修正したら図とグラフは表示されましたが日本語は表示されませんでした。
    • good
    • 1
この回答へのお礼

同様に修正すればできました。有難うございました。

お礼日時:2024/08/05 07:21

分からん。


単に落ちてるだけ、なんじゃないの?
エラーは出てない?
こっち(xubuntu22.04, Python 3.11.9)で試してみると、落ちる、落ちない以外に単にエラーが出てくるんだが。
恐らくNumpy絡みのエラーで落ちてるんだと思うんだけどね。
ただ、デバッグは他人にやらせるような事じゃないと思うし、「プログラミング初心者はNumpyなんざ使わない/使ってはいけない」と言う原則から言うと、貴方は既にPythonプログラミングに「慣れてる」だろうから、デバッガ走らせながら見ていった方がいいと思うよ。
「Pythonを使ってせん断応力図、曲げモ」の回答画像1
    • good
    • 1

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