cwadayi commited on
Commit
0906445
·
verified ·
1 Parent(s): 11bfd54

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +125 -54
app.py CHANGED
@@ -1,7 +1,7 @@
1
  import gradio as gr
2
  import random
3
 
4
- # 1. [創意升級] 專案資料:為每個專案標題加入 Emoji
5
  projects_data = {
6
  "🌊 地震與波形展示": [
7
  {"title": "📡 地震目錄搜尋 API", "url": "https://cwadayi-python-app.hf.space/"},
@@ -33,20 +33,19 @@ projects_data = {
33
  ]
34
  }
35
 
36
- # 2. [創意升級] 隨機推薦函式
37
  def recommend_project():
38
  """從所有專案中隨機挑選一個並回傳 Markdown 格式的推薦"""
39
  all_projects = [item for sublist in projects_data.values() for item in sublist]
40
  recommendation = random.choice(all_projects)
41
 
42
- # 回傳精美的 Markdown 格式
43
  return f"""
44
  ### {recommendation['title']}
45
 
46
  [**點此立即前往 🚀**]({recommendation['url']})
47
  """
48
 
49
- # 3. [創意升級] 自訂 CSS 樣式
50
  css = """
51
  /* 標頭樣式 */
52
  #main-header {
@@ -69,11 +68,10 @@ css = """
69
  margin: 0 auto;
70
  text-align: center;
71
  }
72
- /* 標頭圖片 */
73
  #header-image {
74
  width: 100%;
75
- max-height: 250px; /* 限制最大高度 */
76
- object-fit: cover; /* 圖片會被裁剪以填滿容器 */
77
  border-radius: 12px;
78
  margin-bottom: 1rem;
79
  box-shadow: 0 4px 10px rgba(0,0,0,0.2);
@@ -81,7 +79,7 @@ css = """
81
 
82
  /* 推薦按鈕 */
83
  #recommend-button {
84
- background: linear-gradient(135deg, #1abc9c, #16a085); /* 亮眼的青色漸層 */
85
  color: white !important;
86
  font-size: 1.1rem !important;
87
  font-weight: bold !important;
@@ -101,33 +99,14 @@ css = """
101
  border-radius: 10px;
102
  padding: 1.5rem;
103
  text-align: center;
104
- background-color: #f8fdfc; /* 非常淺的青色背景 */
105
- }
106
- #recommend-output h3 {
107
- margin-top: 0.5rem;
108
- margin-bottom: 1.2rem;
109
- color: #2c3e50;
110
- font-size: 1.4rem;
111
- }
112
- #recommend-output a {
113
- font-size: 1.1rem;
114
- font-weight: bold;
115
- color: #2980b9;
116
- text-decoration: none;
117
- transition: color 0.3s ease;
118
- }
119
- #recommend-output a:hover {
120
- color: #3498db;
121
- text-decoration: underline;
122
  }
 
 
 
123
 
124
  /* 專案標題 */
125
- .project-title h3 {
126
- margin: 0;
127
- padding: 0.5rem 0;
128
- font-size: 1.2rem;
129
- color: #2c3e50;
130
- }
131
 
132
  /* 專案按鈕 */
133
  .project-button a {
@@ -136,35 +115,40 @@ css = """
136
  border-radius: 8px !important;
137
  transition: background-color 0.3s ease, transform 0.2s ease !important;
138
  }
139
- .project-button a:hover {
140
- background-color: #2980b9 !important;
141
- transform: scale(1.03);
142
- }
143
 
144
- /* 頁腳 */
145
- #footer {
146
- text-align: center;
147
- color: #777;
 
 
 
148
  font-size: 0.9rem;
149
- margin-top: 2rem;
 
 
 
150
  }
 
 
 
151
  """
152
 
153
- # 4. [創意升級] 使用 gr.Blocks() 建構介面
154
  with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as demo:
155
 
156
- # 標頭區 (加入圖片)
157
  with gr.Row(elem_id="main-header"):
158
  gr.Markdown(
159
  """
160
  <img id="header-image" src="https://images.pexels.com/photos/220201/pexels-photo-220201.jpeg" alt="Abstract seismic waves banner">
161
-
162
  <h1>地球物理 x Hugging Face 專案展示</h1>
163
  <p>一個地球物理學家的數位百寶箱:探索一系列由 cwadayi 打造的地震與地科應用!</p>
164
  """
165
  )
166
 
167
- # 介紹區 (保持不變)
168
  with gr.Accordion("🚀 關於 Hugging Face Spaces (點我展開)", open=False):
169
  with gr.Row():
170
  with gr.Column():
@@ -173,7 +157,7 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
173
  ### 什麼是 Hugging Face Spaces?
174
  Hugging Face Spaces 是一個由 Hugging Face 提供的免費平台,讓開發者和創作者可以輕鬆地建立、分享和展示他們的機器學習 Demo 或網頁應用程式。
175
 
176
- 它就像是 AI 應用的「YouTube」!您可以使用 Gradio、Streamlit 等 Python 套件快速打造互動介面,或者部署靜態網頁 (HTML/CSS/JS),甚至運行 Docker 容器。
177
  """
178
  )
179
  with gr.Column():
@@ -189,8 +173,97 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
189
  6. **完成!** 您的Gradio應用程式將自動建置並上線。
190
  """
191
  )
192
-
193
- # [創意升級] 隨機推薦區
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
194
  gr.Markdown("---")
195
  with gr.Blocks():
196
  gr.Markdown("## ✨ 幸運推薦 ✨")
@@ -198,11 +271,9 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
198
  recommend_out = gr.Markdown("點擊上方按鈕,讓我為您挑選一個有趣的專案!", elem_id="recommend-output")
199
  gr.Markdown("---")
200
 
201
-
202
  # 專案列表區
203
  gr.Markdown("## 📚 專案總覽")
204
 
205
- # 動態生成所有專案 (現在會顯示帶有 Emoji 的標題)
206
  for category, items in projects_data.items():
207
  with gr.Accordion(category, open=True):
208
  for item in items:
@@ -223,11 +294,11 @@ with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as dem
223
  """
224
  )
225
 
226
- # 5. [創意升級] 綁定按鈕點擊事件
227
  recommend_btn.click(
228
- fn=recommend_project, # 點擊後呼叫的函式
229
- inputs=None, # 沒有輸入
230
- outputs=recommend_out # 輸出到 recommend_out (Markdown 元件)
231
  )
232
 
233
  # 6. 啟動應用程式
 
1
  import gradio as gr
2
  import random
3
 
4
+ # 1. 專案資料 (帶有 Emoji)
5
  projects_data = {
6
  "🌊 地震與波形展示": [
7
  {"title": "📡 地震目錄搜尋 API", "url": "https://cwadayi-python-app.hf.space/"},
 
33
  ]
34
  }
35
 
36
+ # 2. 隨機推薦函式
37
  def recommend_project():
38
  """從所有專案中隨機挑選一個並回傳 Markdown 格式的推薦"""
39
  all_projects = [item for sublist in projects_data.values() for item in sublist]
40
  recommendation = random.choice(all_projects)
41
 
 
42
  return f"""
43
  ### {recommendation['title']}
44
 
45
  [**點此立即前往 🚀**]({recommendation['url']})
46
  """
47
 
48
+ # 3. 自訂 CSS 樣式
49
  css = """
50
  /* 標頭樣式 */
51
  #main-header {
 
68
  margin: 0 auto;
69
  text-align: center;
70
  }
 
71
  #header-image {
72
  width: 100%;
73
+ max-height: 250px;
74
+ object-fit: cover;
75
  border-radius: 12px;
76
  margin-bottom: 1rem;
77
  box-shadow: 0 4px 10px rgba(0,0,0,0.2);
 
79
 
80
  /* 推薦按鈕 */
81
  #recommend-button {
82
+ background: linear-gradient(135deg, #1abc9c, #16a085);
83
  color: white !important;
84
  font-size: 1.1rem !important;
85
  font-weight: bold !important;
 
99
  border-radius: 10px;
100
  padding: 1.5rem;
101
  text-align: center;
102
+ background-color: #f8fdfc;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
  }
104
+ #recommend-output h3 { margin-top: 0.5rem; margin-bottom: 1.2rem; color: #2c3e50; font-size: 1.4rem; }
105
+ #recommend-output a { font-size: 1.1rem; font-weight: bold; color: #2980b9; text-decoration: none; transition: color 0.3s ease; }
106
+ #recommend-output a:hover { color: #3498db; text-decoration: underline; }
107
 
108
  /* 專案標題 */
109
+ .project-title h3 { margin: 0; padding: 0.5rem 0; font-size: 1.2rem; color: #2c3e50; }
 
 
 
 
 
110
 
111
  /* 專案按鈕 */
112
  .project-button a {
 
115
  border-radius: 8px !important;
116
  transition: background-color 0.3s ease, transform 0.2s ease !important;
117
  }
118
+ .project-button a:hover { background-color: #2980b9 !important; transform: scale(1.03); }
 
 
 
119
 
120
+ /* [新增] 教學區塊的程式碼樣式 */
121
+ #tutorial-code-block pre {
122
+ background-color: #2b2b2b; /* 深色背景 */
123
+ color: #f8f8f2; /* 亮色文字 */
124
+ padding: 1.5rem;
125
+ border-radius: 10px;
126
+ font-family: 'Courier New', Courier, monospace;
127
  font-size: 0.9rem;
128
+ line-height: 1.5;
129
+ white-space: pre-wrap; /* 自動換行 */
130
+ overflow-x: auto; /* 水平滾動 */
131
+ border: 2px solid #444;
132
  }
133
+
134
+ /* 頁腳 */
135
+ #footer { text-align: center; color: #777; font-size: 0.9rem; margin-top: 2rem; }
136
  """
137
 
138
+ # 4. 使用 gr.Blocks() 建構介面
139
  with gr.Blocks(css=css, title="地球物理 x Hugging Face 專案展示") as demo:
140
 
141
+ # 標頭區 (含圖片)
142
  with gr.Row(elem_id="main-header"):
143
  gr.Markdown(
144
  """
145
  <img id="header-image" src="https://images.pexels.com/photos/220201/pexels-photo-220201.jpeg" alt="Abstract seismic waves banner">
 
146
  <h1>地球物理 x Hugging Face 專案展示</h1>
147
  <p>一個地球物理學家的數位百寶箱:探索一系列由 cwadayi 打造的地震與地科應用!</p>
148
  """
149
  )
150
 
151
+ # 介紹區
152
  with gr.Accordion("🚀 關於 Hugging Face Spaces (點我展開)", open=False):
153
  with gr.Row():
154
  with gr.Column():
 
157
  ### 什麼是 Hugging Face Spaces?
158
  Hugging Face Spaces 是一個由 Hugging Face 提供的免費平台,讓開發者和創作者可以輕鬆地建立、分享和展示他們的機器學習 Demo 或網頁應用程式。
159
 
160
+ 它就像是 AI 應用的「YouTube」!您可以使用 Gradio、Streamlit 等 Python 套件快速打造互動介面,或者部署靜T態網頁 (HTML/CSS/JS),甚至運行 Docker 容器。
161
  """
162
  )
163
  with gr.Column():
 
173
  6. **完成!** 您的Gradio應用程式將自動建置並上線。
174
  """
175
  )
176
+
177
+ # [新增] 學生教學區塊
178
+ with gr.Accordion("🎓 學生的 AI 創客空間:5 步驟打造你的地科 App!", open=True):
179
+ gr.Markdown(
180
+ """
181
+ <div style="padding: 1rem;">
182
+ <h3>想自己動手做一個酷酷的 App 嗎?跟著 AI 一起,你也能在 5 分鐘內上線!</h3>
183
+ <p>這是一個教你如何「跟 AI (例如 Gemini) 協作」來快速打造並部署應用程式的SOP:</p>
184
+
185
+ <hr style="margin: 1.5rem 0;">
186
+
187
+ <h3>Step 1: 點子發想 🧠</h3>
188
+ <p>先想一個簡單的點子。例如:「我想做一個查詢『地科名詞』的字典!」</p>
189
+
190
+ <h3>Step 2: 詠唱 AI 咒語 🧙</h3>
191
+ <p>打開你最愛的 AI 助手,對它說出清晰的指令 (Prompt),例如:</p>
192
+ <blockquote>
193
+ "請幫我用 Python 和 Gradio 寫一個簡單的應用。我需要一個下拉式選單,選項有「板塊構造」、「地震波」、「海嘯」。當我選擇一個選項時,下方要顯示對應的中文解釋。請給我完整的 `app.py` 程式碼。"
194
+ </blockquote>
195
+
196
+ <h3>Step 3: 取得程式碼 📜</h3>
197
+ <p>AI 會給你一份完整的程式碼。下面這份就是 AI 可能會產生的答案,你可以直接複製它來進行下一步!</p>
198
+
199
+ <div id="tutorial-code-block">
200
+ <pre>
201
+ import gradio as gr
202
+
203
+ # 1. 知識庫 (你的地科字典)
204
+ geo_dict = {
205
+ "板塊構造 (Plate Tectonics)": "地球的岩石圈被分成許多稱為「板塊」的巨大板塊,這些板塊在軟流圈上緩慢移動,彼此碰撞或分離,形成了火山、地震和山脈。",
206
+ "地震波 (Seismic Wave)": "地震時從震源向四面八方傳播的能量波。主要分為 P 波(壓縮波,速度快)和 S 波(剪力波,速度慢),它們是我們研究地球內部的主要工具。",
207
+ "海嘯 (Tsunami)": "由海底地震、火山爆發或山崩引起的巨大海浪。它在深海中傳播速度極快(可達時速 800 公里),但波高很低;當它靠近淺海岸時,速度減慢,波高則急遽增加。"
208
+ }
209
+
210
+ # 2. 定義介面函式
211
+ def get_definition(term):
212
+ # 從字典中查找解釋
213
+ return geo_dict.get(term, "查無此名詞")
214
+
215
+ # 3. 建立 Gradio 介面
216
+ with gr.Blocks(title="我的地科字典") as demo:
217
+ gr.Markdown("# 🚀 我的第一個地科 App")
218
+ gr.Markdown("這是一個由 AI 協助產生的 Gradio 應用程式!")
219
+
220
+ # 輸入元件:下拉式選單
221
+ dropdown = gr.Dropdown(
222
+ label="請選擇一個地科名詞",
223
+ choices=list(geo_dict.keys()) # 選項來自字典的 "key"
224
+ )
225
+
226
+ # 輸出元件:文字框
227
+ output_textbox = gr.Textbox(
228
+ label="名詞解釋",
229
+ lines=5, # 顯示 5 行的高度
230
+ interactive=False # 使用者不能編輯
231
+ )
232
+
233
+ # 4. 綁定互動
234
+ dropdown.change(
235
+ fn=get_definition, # 當下拉選單改變時,呼叫 get_definition 函式
236
+ inputs=dropdown, # 輸入是下拉選單的 "值"
237
+ outputs=output_textbox # 輸出到文字框
238
+ )
239
+
240
+ # 5. 啟動 App
241
+ demo.launch()
242
+
243
+ </pre>
244
+ </div>
245
+
246
+ <h3>Step 4: 部署到 Space 🚀</h3>
247
+ <p>這是最神奇的一步!</p>
248
+ <ol>
249
+ <li>到 Hugging Face 網站,點選你的頭像,選擇 <strong>"New Space"</strong>。</li>
250
+ <li>為你的 Space 命名 (例如: <code>my-geo-dictionary</code>)。</li>
251
+ <li>在 "Space SDK" 中選擇 <strong>"Gradio"</strong> (很重要!)。</li>
252
+ <li>點擊 "Create Space"。</li>
253
+ <li>在你的 Space 頁面,點選 "Files and versions" -> "Add file" -> "Create new file"。</li>
254
+ <li>將檔案命名為 <strong><code>app.py</code></strong> (必須是這個名字!)。</li>
255
+ <li><strong>將上面 "Step 3" 的整段程式碼,完整貼到 `app.py` 的編輯器中。</strong></li>
256
+ <li>點擊 "Commit new file" (提交檔案)。</li>
257
+ </ol>
258
+
259
+ <h3>Step 5: 恭喜你!🎉</h3>
260
+ <p>等待幾分鐘,Hugging Face 會自動幫你把 App "建置" (Building) 起來。當你看到 "Running" 狀態時,恭喜你!你的第一個地科 App 已經上線,全世界都可以透過網址來使用了!</p>
261
+
262
+ </div>
263
+ """
264
+ )
265
+
266
+ # 隨機推薦區
267
  gr.Markdown("---")
268
  with gr.Blocks():
269
  gr.Markdown("## ✨ 幸運推薦 ✨")
 
271
  recommend_out = gr.Markdown("點擊上方按鈕,讓我為您挑選一個有趣的專案!", elem_id="recommend-output")
272
  gr.Markdown("---")
273
 
 
274
  # 專案列表區
275
  gr.Markdown("## 📚 專案總覽")
276
 
 
277
  for category, items in projects_data.items():
278
  with gr.Accordion(category, open=True):
279
  for item in items:
 
294
  """
295
  )
296
 
297
+ # 5. 綁定按鈕點擊事件
298
  recommend_btn.click(
299
+ fn=recommend_project,
300
+ inputs=None,
301
+ outputs=recommend_out
302
  )
303
 
304
  # 6. 啟動應用程式