利用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:
- class Application 用的廖雪峰老师的python的图形教程,形成一个Frame的子类,然后在frame里面添加各种小部件
- 这个小程序的主要核心是组织外部关闭,所以要截获关闭窗口的动作,查询文档发现,只有TK和toplevel两种可以绑定protocol阻止图形界面关闭,所以考虑将Frame框架pack到tk上。
- 执行时发现图形界面后有DOS弹出,所以利用pyinstaller打包文件为exe可执行程序时,采用pyinstaller -F xxx.py --noconsole。运行环境未知,可以自己尝试
- 参考程序,廖雪峰教程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()