如何保证Toplevel创建的非模式对话框只打开一个

记事本程序都要提供查找和替换功能。在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()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值