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()

 

展开阅读全文

没有更多推荐了,返回首页