文章目录
- 文件对话框按钮
 - 代码实现
 - 颜色对话框
 
tkinter系列:
- GUI初步💎布局💎绑定变量💎绑定事件💎消息框💎文件对话框
 - Frame控件💎PanedWindow和notebook控件
 - 扫雷小游戏💎强行表白神器
 - 自定义控件:Expander💎选择按钮
 
文件对话框按钮
文件交互是GUI编程中经常遇到的需求,比如在装软件的时候,往往会遇到自定义安装路径的选项,这个时候往往有两种路径设置方式,一种是直接在文本框中输入,另一种是点击按钮选择对话框。
这个需求实在是太频繁了,值得专门做一个组件,这个组件有三个要素,分别是输入框、按钮和对话框。其必不可少的参数有下面几类
- 布局类:组件高度;Entry和Button的宽度
 - 对话框类型:文件夹对话框还是文件对话框
 - 标签和值,即Button需要有标签,Entry需要有个值
 
方便起见,其他参数都被封装在四个字典中,分别对应主控件、按钮、输入框以及对话框的其他参数。
tkinter.filedialog中共提供了7中对话框,其中四种的返回值是字符串,列表如下
| 对话框 | 说明 | 
|---|---|
| askopenfilename | 文件选择对话框 | 
| askopenfilenames | 多文件选择对话框 | 
| asksaveasfilename | 文件保存对话框 | 
| askdirectory | 文件夹选择对话框 | 
故而需要为其创建一个字典,以求参数一一对应。
代码实现
最后得到程序如下
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()
 
效果如下

颜色对话框
在上面的代码中出现了两行奇怪的内容,即对askcolor对话框的引入和使用。这是tkinter中提供的颜色对话框,可以自由选择颜色,非常便捷。得益于函数式的便利性,只需两行代码,就可以为这个组件添加一个颜色对话框,效果如下













![2023年中国门把手产量、销量及市场规模分析[图]](https://img-blog.csdnimg.cn/img_convert/245f606bb9c02b8f51d6f54024a860a3.png)






