您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Python中怎么實現一個對話框類,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
構建一個修改文件名對話框。
# 構建頂層窗口作為對話框rename_dlg = Toplevel(takefocus=True)# 指定窗口標題rename_dlg.title('Rename')# 禁止窗口尺寸調整rename_dlg.resizable(width=False, height=False)# 構建Frame對象以容納Label和Entry對象# 使用Frame可以分別調整Label/Entry區域和下面的按鈕區域fn_frame = Frame(rename_dlg)fn_frame.grid(row=0,column=0)Label(fn_frame, text='File Name:').grid(row=0, column=0)fn_var = StringVar()fn_var.set(fn)fn_entry = Entry(fn_frame, textvariable=fn_var)fn_entry.grid(row=0, column=1)# 構建Frame對象以容納OK和Cancel按鈕btn_frame = Frame(rename_dlg)btn_frame.grid(row=1, column=0, sticky='e')# 通過labmda表達式傳遞構建按鈕控件時的對話框控件,路徑和文件名信息# 修改后的文件名要在按下【OK】按鈕是通過fn_var.get獲取。ok_btn = Button(btn_frame, text='OK', command=(lambda w=rename_dlg,p=path,s=fn: rename_ok(w,p,s,fn_var.get())))ok_btn.grid(row=0, column=0)# 取消按鈕直接銷毀窗口對象cancel_btn=Button(btn_frame, text='Cancel', command=rename_dlg.destroy)cancel_btn.grid(row=0, column=1)# 限定rename_dlg接收鼠標和鍵盤事件,這是實現模態對話框的關鍵。rename_dlg.grab_set()# 使對話框相對于root窗口居中center_window(rename_dlg, root)# 啟動對話框主循環rename_dlg.mainloop()# 銷毀對話框窗口rename_dlg.destroy()
如果觀察代碼可以知道,從第7行到第27行為止是FileBrowser的實際需要的功能,其他的代碼則是構建任何對話框都需要的處理。以下用用一個類將這部分功能獨立出來:
class Dialog(Toplevel):
def __init__(self, ref, title):
Toplevel.__init__(self, takefocus=True)
self.ref = ref
# 指定窗口標題
self.title(title)
# 禁止窗口尺寸調整
self.resizable(width=False, height=False)
self.create_widgets()
# 限定rename_dlg接收鼠標和鍵盤事件,這是實現模態對話框的關鍵。
self.grab_set()
# 使對話框相對于root窗口居中
center_window(self, ref)
# 啟動對話框主循環
self.mainloop()
def create_widgets(self): pass
當需要構建自己的對話框時只要繼承Dialog可并實現create_widgets方法即可:
class RenameDialog(Dialog):
def __init__(self, file_list, path, fn):
self.path = path
self.fn = fn
self.fn_var = StringVar()
self.fn_var.set(self.fn)
Dialog.__init__(self, file_list.winfo_toplevel(), 'Rename File')
# 更新文件列表
file_list.select_node(None)
def create_widgets(self): # 構建Frame對象以容納Label和Entry對象 # 使用Frame可以分別調整Label/Entry區域和下面的按鈕區域 fn_frame = Frame(self) fn_frame.grid(row=0, column=0) Label(fn_frame, text='File Name:').grid(row=0, column=0) fn_entry = Entry(fn_frame, textvariable=self.fn_var) fn_entry.grid(row=0, column=1) # 構建Frame對象以容納OK和Cancel按鈕 btn_frame = Frame(self) btn_frame.grid(row=1, column=0, sticky='e') # 通過labmda表達式傳遞構建按鈕控件時的對話框控件,路徑和文件名信息 # 修改后的文件名要在按下【OK】按鈕是通過fn_var.get獲取。 ok_btn = Button(btn_frame, text='OK', command=self.__rename) ok_btn.grid(row=0, column=0) # 取消按鈕直接銷毀窗口對象 cancel_btn = Button(btn_frame, text='Cancel', command=self.destroy) cancel_btn.grid(row=0, column=1)
可以看到,RenameDlg類中只剩下FileBrowser相關的部分了。將這部分功能封裝成類的另一個好處是使用對話框的代碼變得簡單了:
def rename_current(self): path, selections = self.selected_files() if path: for fn in selections: dlg = RenameDialog(self, path, fn) self.select_node(None)
上述就是小編為大家分享的Python中怎么實現一個對話框類了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。