python tkinter使右上角‘X’失效,禁止关闭

利用python tkinter模块写的回答问题,禁止强关的小程序(任务管理器强关没有禁止)

直接附上代码

from tkinter import *
import tkinter.messagebox as messagebox

class Application(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):
        self.tiplabel = Label(self, text='输入“我是猪”,退出该程序')
        self.tiplabel.pack()
        self.valueInput = Entry(self)
        self.valueInput.pack()
        self.alertButton = Button(self, text='验证', command=self.proof)
        self.alertButton.pack()

    def proof(self):
        keyvalue = self.valueInput.get()
        
        if keyvalue == '我是猪':
            messagebox.showinfo('提示', '你的自我认知很对')
            root.destroy()
        else:
            messagebox.showerror('错误', '我觉得你可以考虑一下')

def callback():
    messagebox.showwarning('警告','回答问题')

root = Tk()
root.geometry('300x150')
app = Application().pack()
root.protocol("WM_DELETE_WINDOW", callback)
root.mainloop()

Tips:

  1. class Application 用的廖雪峰老师的python的图形教程,形成一个Frame的子类,然后在frame里面添加各种小部件
  2. 这个小程序的主要核心是组织外部关闭,所以要截获关闭窗口的动作,查询文档发现,只有TK和toplevel两种可以绑定protocol阻止图形界面关闭,所以考虑将Frame框架pack到tk上。
  3. 执行时发现图形界面后有DOS弹出,所以利用pyinstaller打包文件为exe可执行程序时,采用pyinstaller -F xxx.py --noconsole。运行环境未知,可以自己尝试
  4. 参考程序,廖雪峰教程https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143200341926302f99cf6f6414dca9dfaaf6e5a25a5b1000,protocol详解http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm#protocols ,思路参考https://baijiahao.baidu.com/s?id=1573259264241102&wfr=spider&for=pc

贴上一个protocol的例子

from Tkinter import *
import tkMessageBox

def callback():
    if tkMessageBox.askokcancel("Quit", "Do you really wish to quit?"):
        root.destroy()

root = Tk()
root.protocol("WM_DELETE_WINDOW", callback)

root.mainloop()

 

  • 11
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值