文章目录
- 文件对话框按钮
- 代码实现
- 颜色对话框
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中提供的颜色对话框,可以自由选择颜色,非常便捷。得益于函数式的便利性,只需两行代码,就可以为这个组件添加一个颜色对话框,效果如下