關(guān)于Gradio中Button用法及事件監(jiān)聽器click方法使用
Gradio中Button用法及事件監(jiān)聽器click方法使用
瞎想亂記
事情是這樣的:入職時面試的是Java,簡歷中寫了會python,剛好最近有個小項目需要用Python實現(xiàn),老板就將這個項目交給了我,我…
項目中還真遇到了好幾個坑,分享一下
功能介紹
功能很簡單,就是一個添加一個按鈕,并給這個按鈕添加一個監(jiān)聽器,實現(xiàn)click方法(我一個后端搞起了前端,以后請叫我全棧)。
相關(guān)代碼
Gradio的基礎(chǔ)不再介紹了,不會的可以去先看看基礎(chǔ)
按鈕的代碼如下:
import gradio as gr
submit_button = gr.Button('提交')以上是定義了一個名為“提交”的按鈕,我想實現(xiàn)通過點擊此按鈕實現(xiàn)某個方法,輸出一行文字,方法的入?yún)⒂腥齻€參數(shù)
具體代碼如下:
image = gr.Image(label="圖片", sources=["upload"], type="filepath") video = gr.Video(label="視頻", sources=["upload"], format='mp4') audio = gr.Audio(label="音頻", sources=["upload"]) output_video = gr.Text() submit_button.click(fun_train_video, inputs=[image, video, audio], outputs=output_video)
稍微解釋下這行代碼,click是按鈕的監(jiān)聽器,當(dāng)點擊“提交”按鈕后,會運行函數(shù)fun_train_video,這個函數(shù)的入?yún)⒂腥齻€,
分別是:image,video,audio,函數(shù)的輸出是output_video。
這樣的代碼pycharm并沒有報錯,但是在運行時會出下下面的錯誤
“inputs”: [block._id for block in self.inputs],
^^^^^^^^^
AttributeError: ‘tuple’ object has no attribute ‘_id’

解決方法
查了很多資料,包括chatGPT,但是并沒有得到理想的答案,問題遲遲沒有解決,眼看著項目要交付,著急啊,后來想起了我的研究生室友,人稱憨憨,上學(xué)時寫的一手好python,果斷請教,最后得到解決。
其實這個問題的根源是這樣的:在監(jiān)聽器click方法中,inputs參數(shù)需要傳入一個包含輸入組件的列表,但是inputs=[image, video, audio]這種寫法是包含元組的列表,這個元組包含了輸入組件和它的標(biāo)簽,但不是組件本身。
當(dāng)gradio嘗試獲取輸入組件id的時候,會從元組中獲取_id屬性,但是元組中沒有這個屬性,就會拋出異常。
修改代碼如下
submit_button.click(fun_train_video, inputs=[image[0], video, audio], outputs=output_video)
那就是在第一個參數(shù)后邊加一個序號,這樣gradio就可以找到組件的id了,挺神奇的,更深層的邏輯還有待去了解,問題總算解決了。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
pyqt5+opencv?實現(xiàn)讀取視頻數(shù)據(jù)的方法
這篇文章主要介紹了pyqt5+opencv?實現(xiàn)讀取視頻數(shù)據(jù)的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01
Python中的Logging模塊在項目應(yīng)用小結(jié)
Python標(biāo)準(zhǔn)庫中的logging模塊為我們提供了強大而靈活的日志記錄功能,本文將介紹如何使用logging模塊,并探討其在Python開發(fā)中的實際應(yīng)用,感興趣的朋友一起看看吧2024-04-04

