记事本程序都要提供查找和替换功能。在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()