Python+tkinter自定義實(shí)現(xiàn)文件選擇按鈕
文件對(duì)話框按鈕
文件交互是GUI編程中經(jīng)常遇到的需求,比如在裝軟件的時(shí)候,往往會(huì)遇到自定義安裝路徑的選項(xiàng),這個(gè)時(shí)候往往有兩種路徑設(shè)置方式,一種是直接在文本框中輸入,另一種是點(diǎn)擊按鈕選擇對(duì)話框。
這個(gè)需求實(shí)在是太頻繁了,值得專(zhuān)門(mén)做一個(gè)組件,這個(gè)組件有三個(gè)要素,分別是輸入框、按鈕和對(duì)話框。其必不可少的參數(shù)有下面幾類(lèi)
- 布局類(lèi):組件高度;Entry和Button的寬度
- 對(duì)話框類(lèi)型:文件夾對(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-07
python文件編譯為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-02
Python中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-04
python實(shí)戰(zhàn)小游戲之考驗(yàn)記憶力
本篇文章介紹了用python編寫(xiě)的曾經(jīng)風(fēng)靡的考驗(yàn)記憶力的小游戲,詳細(xì)介紹了整個(gè)思路和過(guò)程以及代碼,通讀本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下2021-09-09
簡(jiǎn)單的抓取淘寶圖片的Python爬蟲(chóng)
這篇文章主要介紹了簡(jiǎn)單的抓取淘寶圖片的Python爬蟲(chóng),方法比較簡(jiǎn)單,推薦給小伙伴們參考下。2014-12-12
使用Python的Twisted框架構(gòu)建非阻塞下載程序的實(shí)例教程
Twisted的異步工作模式使其在非阻塞情況下可以擁有較高的性能,這里我們來(lái)看一下使用Python的Twisted框架構(gòu)建非阻塞下載程序的實(shí)例教程,包括服務(wù)器端與客戶端的實(shí)踐.2016-05-05

