導航:首頁 > 編程語言 > python里bind

python里bind

發布時間:2022-05-09 18:48:58

python中關於bind()的使用

讓前面那個事件去觸發後面的事件不就成了。調 用後面那個函數。 所以不需要一個事件下bind很多個函數。只需要一個母函數,調 用一組子函數。

❷ python中如何實現多個圖形的實踐綁定

fromTkinterimport*

master=Tk()
w=Canvas(master,width=320,height=320)
w.pack()
forxinrange(0,16):
foryinrange(0,16):
w.create_rectangle(20*x,20*y,20*(x+1),20*(y+1),fill='CornflowerBlue')
defmouse(event):
w.delete(w.find_closest(event.x,event.y))
w.bind("<3>",mouse)
mainloop()

❸ Python的socket模塊中的bind

port中文埠,可以任意寫,一般要寫大於1000的,比如8080啥的。

❹ tkinter中bind()和bind_all()有什麼區別

bind需要指定綁定的事件,
而bind_all將綁定所有事件,觸發任何事件都將回調函數

❺ python中bind的port為0代表什麼意思

bind函數需要兩個參數,這里傳入了一個元組,該元組有兩個元素,那這時跟bind函數需要的參數位置一一對應。
元組的第一個元素是'',表示不傳入第一個參數,這時就使用默認的值,是本機IP地址。

❻ wxpython中bind怎麼傳遞參數函數觸發

最近搗鼓Python,也就自然搗鼓上了wxPython。我曾經用過Qt和Gtk+寫GUI,但幾乎所有的Python書都告訴我說最好用的是wxPython,我沒有嘗試PyQt和PyGtk就開始研究wxPython了。在Qt和Gtk+之間我更喜歡Qt,因為它跨平台做得很好,而且商業化也不錯。但wxWidget給人的感覺就完全不同了。

如果說wxWidgets相對於Qt有什麼優勢的話,大概就只有體積較小了。從開發效率上看,如果不和Python組合真的比不上Qt;從商業支持上看wxWidgets根本沒有。不過和Python組合之後,開發效率大大提高,雖然用來做很正式的商業軟體並不合適,但寫寫小程序還是很方便的。

現在切入正題,wxWidgets是一個事件驅動的體系,對於觸發的事件,需要給它掛上相應的事件處理函數。在Python中這個函數的形式是這樣的:

wx.Frame.Bind(self, event, handler, source=None, id=-1, id2=-1)
在一般使用時,我們基本上只會給定event、handler和source,event是事件的名稱,handler是處理函數,source是事件的發生者,比如一個Button1被單擊而發生了EVT_BUTTON事件,如果我們用self.OnButton1()來處理,會這么寫:

self.Bind(wx.EVT_BUTTON, self.OnButton1, self.Button1)
這里self是一個Frame(wxPython中的窗體這樣的東西),而Button1是放在這個Frame下面的一個Button,self.OnButton1就是事件處理函數。而wxPython定死了事件處理函數的形式:

def handler(self,event):
...
事件處理函數只能接受兩個參數,一個還是self。至於event,一看就知道是那個發生的事件。但這樣就有一個問題了:如果我想批量創建一些按鈕或者菜單鍵(我想這種事情是很普遍的),並且希望用同一個函數來處理它們,這個函數該怎樣辨別是哪個按鈕觸發的事件呢?顯然我們希望能多傳一些參數。Qt實現這一點很容易,但wxWidgets就顯得很棘手了。

我並沒有用C++寫過wxWidgets的程序——確切地講是復制過一個example的,但是不知道是我英語太拆還是真的沒有,我沒能在wxWidgets的入門指南中找到編譯指令,最後沒法編譯它。因此我不知道這個限制是不是C++也有,但是Python可以通過lambda來解決這個問題。以下的例子我用的是菜單。

首先我們建一個OnMenusClick函數:

def OnMenusClick(self, event, mark):
....
這個函數多接收一個mark,綁定的時候,就不是把OnMenusClick直接綁定上去,而是傳遞一個被lambda包裝過的函數。下面這個例子就會建立一堆Menu的按鍵,並給他們編號,OnMenusClick就可以接收到它們的編號了:

menu=wx.Menu()
for i in range(0,N):
btn=menu.Append(wx.NewId(), str(i))
self.Bind(wx.EVT_MENU, lambda evt, mark=i : self.OnMenusClick(evt,mark) ,btn )
完成了!是不是感覺有點magic?關鍵在於這句lambda

lambda evt, mark=i : self.OnMenusClick(evt,mark)
這句實際上產生了只接收evt一個參數的函數,並將其傳遞給了self.OnMenusClick,這樣就能夠實現給事件處理函數傳遞更多參數的目的了。

閱讀全文

與python里bind相關的資料

熱點內容
如何判斷伺服器有沒有帶寬 瀏覽:41
天正建築批量刪除命令 瀏覽:94
cad最下面的一排命令都什麼意思 瀏覽:456
pythonimportcpp 瀏覽:850
W10的系統怎麼給U盤加密 瀏覽:370
華為手機代碼編程教學入門 瀏覽:762
和彩雲沒會員怎樣解壓 瀏覽:634
androidimageview保存 瀏覽:387
新買店鋪什麼伺服器 瀏覽:883
文件夾能直接刻錄嗎 瀏覽:493
androidxmpp刪除好友 瀏覽:969
javac哪個前景好 瀏覽:428
中華英才網app為什麼不能搜索了 瀏覽:660
伺服器域名是什麼意思 瀏覽:52
Linux導出mysql命令 瀏覽:159
無詐建鄴是什麼app 瀏覽:228
python中的雙色球 瀏覽:167
python解釋器里如何換行 瀏覽:412
python編寫格式 瀏覽:576
用python做出來的軟體 瀏覽:469