Python+tkinter自定義實(shí)現(xiàn)文件選擇按鈕
文件對話框按鈕
文件交互是GUI編程中經(jīng)常遇到的需求,比如在裝軟件的時候,往往會遇到自定義安裝路徑的選項(xiàng),這個時候往往有兩種路徑設(shè)置方式,一種是直接在文本框中輸入,另一種是點(diǎn)擊按鈕選擇對話框。
這個需求實(shí)在是太頻繁了,值得專門做一個組件,這個組件有三個要素,分別是輸入框、按鈕和對話框。其必不可少的參數(shù)有下面幾類
- 布局類:組件高度;Entry和Button的寬度
- 對話框類型:文件夾對話框還是文件對話框
- 標(biāo)簽和值,即Button需要有標(biāo)簽,Entry需要有個值
方便起見,其他參數(shù)都被封裝在四個字典中,分別對應(yīng)主控件、按鈕、輸入框以及對話框的其他參數(shù)。
tkinter.filedialog中共提供了7中對話框,其中四種的返回值是字符串,列表如下
對話框 | 說明 |
---|---|
askopenfilename | 文件選擇對話框 |
askopenfilenames | 多文件選擇對話框 |
asksaveasfilename | 文件保存對話框 |
askdirectory | 文件夾選擇對話框 |
故而需要為其創(chuàng)建一個字典,以求參數(shù)一一對應(yīng)。
代碼實(shí)現(xiàn)
最后得到程序如下
import tkinter as tk import tkinter.ttk as ttk from tkinter.filedialog import (askopenfilename, askopenfilenames, askdirectory, asksaveasfilename) from tkinter.colorchooser import askcolor class DialogButton(ttk.Frame): def __init__(self, master, height, widthL, widthR, label, logtype, text=None, frmDct={}, btnDct={}, enyDct={}, logDct={}): w = widthL + widthR super().__init__(master, height=height, width = w, **frmDct) self.pack() self.text = tk.StringVar() if not text else text ttk.Button(self, width=widthR, text=label, command = self.Click, **btnDct).pack(side=tk.RIGHT) ttk.Entry(self, width=widthL, textvariable=self.text, **enyDct).pack(fill=tk.X, expand=True, padx=5) self.logtype = logtype self.logDct = logDct def Click(self): typeDct = { "文件" : askopenfilename, "文件夾" : askdirectory, "多文件" : askopenfilenames, "保存文件" : asksaveasfilename, "顏色" : askcolor, } text = typeDct[self.logtype](**self.logDct) self.text.set(text) def get(self): return self.text.get() if __name__ == "__main__": root = tk.Tk() DialogButton(root, 10, 50, 10, "選擇文件夾", "文件夾") root.mainloop()
效果如下
顏色對話框
在上面的代碼中出現(xiàn)了兩行奇怪的內(nèi)容,即對askcolor對話框的引入和使用。這是tkinter中提供的顏色對話框,可以自由選擇顏色,非常便捷。得益于函數(shù)式的便利性,只需兩行代碼,就可以為這個組件添加一個顏色對話框,效果如下
到此這篇關(guān)于Python+tkinter自定義實(shí)現(xiàn)文件選擇按鈕的文章就介紹到這了,更多相關(guān)python tkinter自定義組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python函數(shù)中return后的語句一定不會執(zhí)行嗎?
這篇文章主要給大家詳細(xì)分析講解了關(guān)于python函數(shù)中return語句后的語句是否一定不會執(zhí)行的相關(guān)資料,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。2017-07-07python文件編譯為pyc后運(yùn)行的實(shí)現(xiàn)步驟
本文主要介紹了python文件編譯為pyc后運(yùn)行的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Python中SOAP項(xiàng)目的介紹及其在web開發(fā)中的應(yīng)用
這篇文章主要介紹了Python中的SOAP項(xiàng)目及其在web開發(fā)中的應(yīng)用,本文來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下2015-04-04python實(shí)戰(zhàn)小游戲之考驗(yàn)記憶力
本篇文章介紹了用python編寫的曾經(jīng)風(fēng)靡的考驗(yàn)記憶力的小游戲,詳細(xì)介紹了整個思路和過程以及代碼,通讀本篇對大家的學(xué)習(xí)或工作具有一定的價值,需要的朋友可以參考下2021-09-09使用Python的Twisted框架構(gòu)建非阻塞下載程序的實(shí)例教程
Twisted的異步工作模式使其在非阻塞情況下可以擁有較高的性能,這里我們來看一下使用Python的Twisted框架構(gòu)建非阻塞下載程序的實(shí)例教程,包括服務(wù)器端與客戶端的實(shí)踐.2016-05-05