记事本程序都要提供查找和替换功能。在Python中可使用tkinter的Toplevel类创建查找和替换非模式对话框。在打开查找和替换非模式对话框后,不允许再打开其它的查找和替换非模式对话框。实现的思路是在打开查找和替换非模式对话框时,使打开对话框的菜单项或按钮变为不可用,关闭查找和替换非模式对话框后,使这个菜单项或按钮重新变为可用。但是使用Toplevel窗体右上角X按钮也可关闭对话框,关闭对话框的方法是在Toplevel类中,无法使这个菜单项或按钮重新变为可用。必须令单击Toplevel窗体右上角X按钮执行我们自己编写的函数。下边代码完成此功能。具体程序见后边源程序。 f1.protocol(“WM_DELETE_WINDOW”, closef1) #使f1窗口关闭时调用参数2指定函数
import tkinter as tk def closef1(): b2['state']='normal' f1.destroy() def openDialog(): global f1,e1 #在Toplevel窗口和主窗口可以互相使用对方的变量和方法。 f1 = tk.Toplevel(root) #用Toplevel类创建独立主窗口的新窗口 f1.transient(root) #使f1总是在父窗口前边,父窗口最小化,f1被隐藏。模式对话框不需要 e1=tk.Entry(f1) #可在e1中输入数据,单击确定按钮将数据显示在主窗口label1上 e1.pack() b1 = tk.Button(f1,text='确定',command=showInput).pack() f1.protocol("WM_DELETE_WINDOW", closef1) #使f1窗口关闭时调用参数2指定函数 b2['state']='disabled' def showInput(): #在此函数中,可检查数据格式是否正确 label1['text']=e1.get() #显示e1中输入的数据 root = tk.Tk() root.geometry('200x200+50+50') b2=tk.Button(root, text="打开模式对话框", command=openDialog) b2.pack() label1=tk.Label(root,text='初始字符') label1.pack() root.mainloop()