程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

wxpython多部件綁定

編輯:Python

在使用wxpython時我們經常需要為部件綁定功能。

我以為當存在多個需要綁定相同功能的部件時,存在以下幾種方法:

        一、一個部件綁定一個功能

        二、都綁定到同一個功能,再在函數中進行判斷觸發的部件是哪一個

第一種十分浪費時間精力,而且會大幅度增長代碼。

本篇文章簡單的描述一下第二種方法

class main_label():
def __init__(self):
app = wx.App() #創建wx對象
frame = wx.Frame(None, title="我是帥比", size=(600, 225))
self.text1 = wx.StaticText(frame, -1, '文本1', pos=(150, 30))
self.textctrl1 = wx.TextCtrl(frame, -1, u'123', pos=(150, 55), size=(260, 25)) #文本框1
self.inputbt1 = wx.Button(frame, -1, '導入', pos=(415, 55), size=(70, 25))
self.text2 = wx.StaticText(frame, -1, '文本2', pos=(150, 85))
self.textctrl2 = wx.TextCtrl(frame, -1, u'123', pos=(150, 105), size=(260, 25))
self.inputbt2 = wx.Button(frame, -1, '導入', pos=(415, 105), size=(70, 25))
self.inputbt3 = wx.Button(frame, -1, '生成request', pos=(150, 140), size=(130, 30))
self.inputbt4 = wx.Button(frame, -1, 'Mapping', pos=(360, 140), size=(130, 30))
textctrl_list_str=['self.textctrl{}'.format(i) for i in range(1,3)] #將對象名以字符串形式儲存
button_list_str=['self.inputbt{}'.format(i) for i in range(1,3)]
self.textctrl_list=[]
for i in textctrl_list_str:
self.textctrl_list.append(eval(i)) #通過eval將字符串重新轉為對象
self.button_list=[]
for i in button_list_str:
self.button_list.append(eval(i))
self.inputbt1.Bind(wx.EVT_BUTTON, self.input_xlsx)
# self.inputbt3.Bind(wx.EVT_BUTTON, self.filling)
for t in self.textctrl_list:
t.Bind(wx.EVT_LEFT_DCLICK, lambda x,textctrl =t:self.textctrl_k(event=x,textctrl=textctrl)) #為對象綁定功能
for t in self.button_list:
t.Bind(wx.EVT_BUTTON, lambda x,textctrl =t:self.input_xlsx(event=x,textctrl=textctrl))
frame.SetBackgroundColour('white')
frame.Show()
app.MainLoop()
def input_xlsx(self, event,textctrl):
index_num = self.button_list.index(textctrl) #獲得觸發部件的索引
btn = event.GetEventObject()
btn.Disable()
files = "EXCEL工作簿(*.xlsx;*.xls)|*.xlsx;*.xls|" "EXCEL工作簿(*.xlsx)|*.xlsx|" "EXCEL工作簿(*.xls)|*.xls"
file_dir = wx.FileDialog(None, message="選擇導入路徑", wildcard=files, style=wx.FD_OPEN)
if file_dir.ShowModal() == wx.ID_OK: # wx.ID_OK是判斷結果,並執行相應程序
self.textctrl_list[index_num].SetValue(file_dir.GetPath()) #設定按鍵對應文本框內容
btn.Enable()
def textctrl_k(self, event, textctrl):
index_num = self.textctrl_list.index(textctrl)
if "123" in self.textctrl_list[index_num].GetValue():
self.textctrl_list[index_num].ChangeValue("")
self.textctrl_list[index_num].SetFocus()
if self.textctrl_list[index_num].GetValue() != "":
self.textctrl_list[index_num].Unbind(wx.EVT_LEFT_DOWN)


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved