cwadayi commited on
Commit
8ca0972
·
verified ·
1 Parent(s): 3406ead

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +77 -23
app.py CHANGED
@@ -2,7 +2,18 @@ import gradio as gr
2
  import random
3
  import textwrap # 用於處理程式碼字串的縮排
4
 
5
- # [修復] 我們將從外部 .py 檔案讀取教學程式碼,以避免解析錯誤
 
 
 
 
 
 
 
 
 
 
 
6
  def load_code_from_file(filename):
7
  try:
8
  with open(filename, 'r', encoding='utf-8') as f:
@@ -174,7 +185,7 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
174
  with gr.Row(elem_id="main-header"):
175
  gr.Markdown(
176
  """
177
- <img id="header-image" src="https://images.pexels.com/photos/220201/pexels-photo-220201.jpeg" alt="Abstract seismic waves banner">
178
  <h1>地球物理 x Hugging Face 專案展示</h1>
179
  <p>一個地球物理學家的數位百寶箱:探索一系列由 cwadayi 打造的地震與地科應用!</p>
180
  """
@@ -208,9 +219,63 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
208
  elem_classes="project-button"
209
  )
210
 
211
- # --- Tab 2: AI 創客空間 (學生教學) ---
212
- with gr.TabItem("🎓 AI 創客空間", id=1):
213
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
214
  gr.Markdown(
215
  """
216
  <div style="padding: 1rem 0;">
@@ -219,8 +284,6 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
219
  </div>
220
  """
221
  )
222
-
223
- # --- Level 1: 基礎教學 ---
224
  with gr.Accordion("Level 1: 基礎字典 App 📖 (點我展開)", open=True):
225
  gr.Markdown(
226
  """
@@ -239,18 +302,17 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
239
  </div>
240
  """
241
  )
242
-
243
  gr.Code(
244
  label="app.py (Level 1 範例)",
245
  value=TUTORIAL_CODE_BASIC,
246
  language="python",
247
  interactive=False
248
  )
249
-
250
  gr.Markdown(
251
  """
252
  <div style="padding: 1rem 0;">
253
  <h3>Step 4: 部署到 Space 🚀</h3>
 
254
  <ol>
255
  <li>到 Hugging Face 網站,點選你的頭像,選擇 <strong>"New Space"</strong>。</li>
256
  <li>為你的 Space 命名 (例如: <code>my-geo-dictionary</code>)。</li>
@@ -268,7 +330,6 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
268
  """
269
  )
270
 
271
- # --- Level 2: 進階教學 ---
272
  with gr.Accordion("Level 2: 進階地震地圖 App 🌍 (點我展開)", open=False):
273
  gr.Markdown(
274
  """
@@ -290,16 +351,11 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
290
  </div>
291
  """
292
  )
293
-
294
- # [***** 修復 *****]
295
- # 將 language="plaintext" 參數完全移除
296
  gr.Code(
297
  label="requirements.txt (必備)",
298
  value=TUTORIAL_REQUIREMENTS,
299
- # language="plaintext", # <-- 錯誤已修正 (整行刪除)
300
  interactive=False
301
  )
302
-
303
  gr.Markdown(
304
  """
305
  <div style="padding: 1rem 0;">
@@ -308,19 +364,17 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
308
  </div>
309
  """
310
  )
311
-
312
  gr.Code(
313
  label="app.py (Level 2 範例)",
314
  value=TUTORIAL_CODE_ADVANCED,
315
  language="python",
316
  interactive=False
317
  )
318
-
319
  gr.Markdown(
320
  """
321
  <div style="padding: 1rem 0;">
322
  <h3>Step 4: 部署 App (上傳 2 個檔案)</h3>
323
- <p>這次,你需要上傳 <strong>2 個檔案</strong>到你的 Hugging Face Space:</p>
324
  <ol>
325
  <li><code>requirements.txt</code> (包含 `gradio`, `obspy`, `folium` 的清單)</li>
326
  <li><code>app.py</code> (包含上面 Level 2 的程式碼)</li>
@@ -332,8 +386,8 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
332
  """
333
  )
334
 
335
- # --- Tab 3: 關於 Spaces ---
336
- with gr.TabItem("ℹ️ 關於 Spaces", id=2):
337
  with gr.Row(equal_height=True, variant="panel"):
338
  with gr.Column():
339
  gr.Markdown(
@@ -341,7 +395,7 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
341
  ### 什麼是 Hugging Face Spaces?
342
  Hugging Face Spaces 是一個由 Hugging Face 提供的免費平台,讓開發者和創作者可以輕鬆地建立、分享和展示他們的機器學習 Demo 或網頁應用程式。
343
 
344
- 它就像是 AI 應用的「YouTube」!您 Kontext C使用 Gradio、Streamlit 等 Python 套件快速打造互動介面,或者部署靜態網頁 (HTML/CSS/JS),甚至運行 Docker 容器。
345
  """
346
  )
347
  with gr.Column():
@@ -349,7 +403,7 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
349
  """
350
  ### 🚀 如何部署 Gradio 應用程式?
351
  **這本身就是一個 Gradio 應用程式!** 部署它非常簡單:
352
- 1. 在 Hugging Face 建立一個新 Space。
353
  2. 選擇 SDK:選擇 **"Gradio"** (這也是預設選項)。
354
  3. 建立 Space 後,點選 "Files and versions" 分頁。
355
  4. 建立一個名為 `app.py` 的檔案。
@@ -363,7 +417,7 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
363
  gr.Markdown(
364
  """
365
  <hr>
366
- <p id="footer">此頁面由 Gemini 協助生成,展示 "1022 中央地科演講" 中的 Hugging Face 專案。</p>
367
  """
368
  )
369
 
 
2
  import random
3
  import textwrap # 用於處理程式碼字串的縮排
4
 
5
+ # [新增] 匯入範例 App 的核心功能
6
+ # 感謝步驟 1 & 2 的修改,我們現在可以安全地匯入它們
7
+ try:
8
+ from tutorial_basic import get_definition, geo_dict
9
+ from tutorial_advanced import fetch_and_plot_events
10
+ IMPORTS_SUCCESSFUL = True
11
+ except ImportError as e:
12
+ print(f"警告:無法匯入範例程式。{e}")
13
+ IMPORTS_SUCCESSFUL = False
14
+
15
+
16
+ # 從外部 .py 檔案讀取教學程式碼 (用於教學分頁)
17
  def load_code_from_file(filename):
18
  try:
19
  with open(filename, 'r', encoding='utf-8') as f:
 
185
  with gr.Row(elem_id="main-header"):
186
  gr.Markdown(
187
  """
188
+ <img id="header-image" src="https://images.pexels.com/photos/220201/pexels-photo-2201.jpeg" alt="Abstract seismic waves banner">
189
  <h1>地球物理 x Hugging Face 專案展示</h1>
190
  <p>一個地球物理學家的數位百寶箱:探索一系列由 cwadayi 打造的地震與地科應用!</p>
191
  """
 
219
  elem_classes="project-button"
220
  )
221
 
222
+ # --- [新增] Tab 2: 範例 1 (地科字典) ---
223
+ with gr.TabItem("📖 範例 1: 地科字典", id=1):
224
+ gr.Markdown("# 🚀 範例 1: 地科字典 (Live Demo)")
225
+ gr.Markdown("這是在「AI 創客空間」中教學的 Level 1 基礎範例的**即時互動版本**。")
226
+ if IMPORTS_SUCCESSFUL:
227
+ # 建立 Level 1 App 的介面
228
+ dropdown = gr.Dropdown(
229
+ label="請選擇一個地科名詞",
230
+ choices=list(geo_dict.keys()) # 從匯入的 geo_dict 取得資料
231
+ )
232
+ output_textbox = gr.Textbox(
233
+ label="名詞解釋",
234
+ lines=5,
235
+ interactive=False
236
+ )
237
+ dropdown.change(
238
+ fn=get_definition, # 使用匯入的 get_definition 函式
239
+ inputs=dropdown,
240
+ outputs=output_textbox
241
+ )
242
+ else:
243
+ gr.Warning("範例 1 載入失敗。請檢查 app.py 的匯入 (import) 設定。")
244
+
245
+ # --- [新增] Tab 3: 範例 2 (地震地圖) ---
246
+ with gr.TabItem("🌍 範例 2: 地震地圖", id=2):
247
+ gr.Markdown("# 🚀 範例 2: 進階地震地圖 (Live Demo)")
248
+ gr.Markdown("這是在「AI 創客空間」中教學的 Level 2 進階範例的**即時互動版本**。")
249
+ if IMPORTS_SUCCESSFUL:
250
+ # 建立 Level 2 App 的介面
251
+ with gr.Row():
252
+ mag_slider = gr.Slider(
253
+ minimum=4.0,
254
+ maximum=8.0,
255
+ value=5.0,
256
+ step=0.1,
257
+ label="最小地震規模 (M)"
258
+ )
259
+ days_slider = gr.Slider(
260
+ minimum=1,
261
+ maximum=30,
262
+ value=7,
263
+ step=1,
264
+ label="搜尋天數 (過去幾天)"
265
+ )
266
+ search_button = gr.Button("搜尋並繪製地圖 🌍", variant="primary")
267
+ map_output = gr.HTML(label="地震分佈圖")
268
+ search_button.click(
269
+ fn=fetch_and_plot_events, # 使用匯入的 fetch_and_plot_events 函式
270
+ inputs=[mag_slider, days_slider],
271
+ outputs=map_output
272
+ )
273
+ else:
274
+ gr.Warning("範例 2 載入失敗。請檢查 app.py 的匯入 (import) 設定,並確認 `obspy` 和 `folium` 已在 `requirements.txt` 中。")
275
+
276
+ # --- Tab 4: AI 創客空間 (教學) ---
277
+ with gr.TabItem("🎓 AI 創客空間", id=3):
278
+ # (此分頁保持不變,繼續顯示教學文字和程式碼)
279
  gr.Markdown(
280
  """
281
  <div style="padding: 1rem 0;">
 
284
  </div>
285
  """
286
  )
 
 
287
  with gr.Accordion("Level 1: 基礎字典 App 📖 (點我展開)", open=True):
288
  gr.Markdown(
289
  """
 
302
  </div>
303
  """
304
  )
 
305
  gr.Code(
306
  label="app.py (Level 1 範例)",
307
  value=TUTORIAL_CODE_BASIC,
308
  language="python",
309
  interactive=False
310
  )
 
311
  gr.Markdown(
312
  """
313
  <div style="padding: 1rem 0;">
314
  <h3>Step 4: 部署到 Space 🚀</h3>
315
+ <p>部署你自己的版本!</p>
316
  <ol>
317
  <li>到 Hugging Face 網站,點選你的頭像,選擇 <strong>"New Space"</strong>。</li>
318
  <li>為你的 Space 命名 (例如: <code>my-geo-dictionary</code>)。</li>
 
330
  """
331
  )
332
 
 
333
  with gr.Accordion("Level 2: 進階地震地圖 App 🌍 (點我展開)", open=False):
334
  gr.Markdown(
335
  """
 
351
  </div>
352
  """
353
  )
 
 
 
354
  gr.Code(
355
  label="requirements.txt (必備)",
356
  value=TUTORIAL_REQUIREMENTS,
 
357
  interactive=False
358
  )
 
359
  gr.Markdown(
360
  """
361
  <div style="padding: 1rem 0;">
 
364
  </div>
365
  """
366
  )
 
367
  gr.Code(
368
  label="app.py (Level 2 範例)",
369
  value=TUTORIAL_CODE_ADVANCED,
370
  language="python",
371
  interactive=False
372
  )
 
373
  gr.Markdown(
374
  """
375
  <div style="padding: 1rem 0;">
376
  <h3>Step 4: 部署 App (上傳 2 個檔案)</h3>
377
+ <p>部署你自己的版本!</p>
378
  <ol>
379
  <li><code>requirements.txt</code> (包含 `gradio`, `obspy`, `folium` 的清單)</li>
380
  <li><code>app.py</code> (包含上面 Level 2 的程式碼)</li>
 
386
  """
387
  )
388
 
389
+ # --- Tab 5: 關於 Spaces ---
390
+ with gr.TabItem("ℹ️ 關於 Spaces", id=4):
391
  with gr.Row(equal_height=True, variant="panel"):
392
  with gr.Column():
393
  gr.Markdown(
 
395
  ### 什麼是 Hugging Face Spaces?
396
  Hugging Face Spaces 是一個由 Hugging Face 提供的免費平台,讓開發者和創作者可以輕鬆地建立、分享和展示他們的機器學習 Demo 或網頁應用程式。
397
 
398
+ 它就像是 AI 應用的「YouTube」!您可以使用 Gradio、Streamlit 等 Python 套件快速打造互動介面,或者部署靜態網頁 (HTML/CSS/JS),甚至運行 Docker 容器。
399
  """
400
  )
401
  with gr.Column():
 
403
  """
404
  ### 🚀 如何部署 Gradio 應用程式?
405
  **這本身就是一個 Gradio 應用程式!** 部署它非常簡單:
406
+ 1. 在 Hugging Face 建立一個 new Space。
407
  2. 選擇 SDK:選擇 **"Gradio"** (這也是預設選項)。
408
  3. 建立 Space 後,點選 "Files and versions" 分頁。
409
  4. 建立一個名為 `app.py` 的檔案。
 
417
  gr.Markdown(
418
  """
419
  <hr>
420
+ <p id="footer">此頁面由 Gemini 協助生成,展示 "1022 中央地科演講" 中的 Hugging Face G專案。</p>
421
  """
422
  )
423