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