tkinter绘制组件(43)——对话框
引言
严格来说,对话框是控件的组合,不是一个控件,但是是一种常见的功能交互界面,因此,TinUI有必要实现内置的对话框。
TinUI的对话框基于TinUIDialog类,该类设计和tkinter内置Dialog一样,不作为外部调用类,而是通过内置的showinfo
等函数封装,让开发者直接使用这些函数。TinUI对话框分为信息提示框和输入框,都将通过TinUIDialog类实现。
布局
窗口
弹窗窗口就是一个简单的Toplevel,但是绑定了父窗口,或者说产生该对话框的窗口。
class Dialog(Toplevel):
"""
TinUI对话框基础类
"""
def __init__(self,master,dialogtype='normal',**options):
super().__init__(master,**options)
self.withdraw()
self.tinui=BasicTinUI(self)
self.tinui.pack(fill='both',expand=True)
self.type=dialogtype#对话框类型
self.resizable(False,False)
self.tk.call('wm', 'iconbitmap', self._w, '-default', '')
这里设置wm_iconbitmap用了tk命令,是为了关闭窗口图标。
下面,我们将以消息提示框为例,简要说明TinUIDialog的实现。
初始化
TinUIdialog的封装函数会调用对话框基础类,通过给定参数进行窗口初始化。
def initial_msg(self,title,content,yestext='OK',notext='Cancel'):
"""
初始化对话框-消息类
"""
YES=yestext
NO=notext
self.title(title)
self.protocol('WM_DELETE_WINDOW',lambda:self.return_msg(None))
这里用
initial_msg
命名是因为这是信息提示对话框,输入对话框的初始化方法命名为initial_input
。
对话框类型
这里的类型指的是对话框的内容性质,比如普通信息、重要信息、警告、错误、问询等等。
输入问答框有文本、整数、浮点数输入等等。
在窗口初始化时,直接通过判断窗口类型进行基础配置。
if self.type=='normal':
pass
elif self.type=='info':
self.tinui['bg']='#ffffff'
icon_uid=self.tinui.add_paragraph((5,5),text='\uE946',fg='#5969e0',font='{Segoe Fluent Icons} 14',anchor='w')
self.tinui.addtag_withtag('content',icon_uid)