嘿,我正在制作一个程序,当我输入错误的密码时,使用我的网络摄像头拍照。该计划将开放,我希望它不可关闭。 我需要知道如何使用tkinter使窗口不可关闭。使用tkinter的不可关闭窗口
回答
你可以尝试@abarnert建议的所有事情,但我认为最简单的方法就是忽略关闭事件。
这里有一个具体的例子:
import Tkinter as tk
import tkMessageBox as messagebox
root = tk.Tk()
def on_closing():
if messagebox.askokcancel("Quit", "Do you want to quit?"):
root.destroy()
root.protocol("WM_DELETE_WINDOW", on_closing)
root.mainloop()
(适用于Windows编辑的代码)
因此改变on_closing()
到 def on_closing(): pass
和使其不受限制奥萨卜莱。我试过Alt + F4,关闭按钮,从Windows任务栏关闭它,都无济于事。我能够杀死它的唯一方法是使用任务管理器。
Tkinter没有任何办法直接做到这一点。但它确实有一些可能足够好,也可能是太矫枉过正:在overrideredirect
标志:
如果不为零,这防止了窗口管理器,从装饰窗口。换句话说,窗口不会有标题或边框,并且它不能通过普通的方式移动或关闭。
这并不是最新的;它可能实际上在某些平台上有标题或边界...但它不会被关闭。
这是很容易使用:只需做root.overrideredirect(True)
(或者,如果你想要它做的不同Toplevel
窗口,而不是你的根,window.overrideredirect(True)
)。
但是请注意,它不能是搬迁或停业,不仅仅是它无法关闭。 (如果需要,它也不能调整大小。)
所以,你可以做的唯一事情就是设置标志,然后绑定鼠标按钮事件来处理手动移动。例如,在窗口的__init__
方法:
self.overrideredirect(True) # if this is a Toplevel
#self.parent.overrideredirect(True) # if this is a Frame on root
self.bind('<ButtonPress-1>', self.move_start)
self.bind('<ButtonRelease-1>', self.move_end)
self.bind('<B1-Motion>', self.move_move)
然后:
def move_start(self, event):
self.startx, self.starty = event.x, event.y
def move_stop(self, event):
self.move_move(event)
def move_move(self, event):
x = self.winfo_x() + event.x - self.startx
y = self.winfo_y() + event.y - self.starty
self.geometry("+%s+%s" % (x, y))
很显然,如果你想在窗口内的任何部件接受的点击,你可能不希望使整个窗口成为拖动区域。实际上,即使没有任何可点击的内容,您可能也不想让整个窗口成为拖动区域,因为这不是真正遵循Mac或Windows人机界面指南。您可以伪造一个抓地区域 - 标题栏,窗口周围的边框等 - 例如,只需添加一个Label
固定到您想要抓住的侧面,并且只需要在该处添加bind
,或者创建一个从主窗口插入“子”窗口,窃取bind
。但这永远不会像“本地”窗口。
如果您确实需要一个本机窗口,但关闭窗口(Windows右上角的X
,Mac左上角的红点等)被禁用或丢失(并且打开Windows,窗口菜单上的“关闭”项禁用,Alt + F4等等,对X11也是如此......)......据我所知,在Tkinter中没有跨平台的方式来做到这一点。您必须为每个平台编写代码,以获取底层本机窗口对象,并为它们执行本机窗口事物。此时,您可能想要使用比Tkinter更强大的窗口库,例如,我相信Qt,Gtk +和wx都有更简单的创建常规窗口的方法,但禁用关闭框。
- 1. 关闭tkinter的窗口
- 2. 关闭线程Tkinter窗口
- 3. 如何关闭Tkinter窗口
- 4. 关闭一个Toplevel的窗口的Tkinter
- 5. 关闭Tkinter窗口的功能
- 6. Python Tkinter - 关闭对话框而不关闭主窗口
- 7. 如何使SDL2窗口不可关闭?
- 8. 如何使TideSDK窗口不可关闭?
- 9. SWT使不可能关闭org.eclipse.swt.widgets.Dialog窗口
- 10. 只关闭一个tkinter窗口
- 11. Tkinter窗口在运行时关闭
- 12. 从python的tkinter的顶层窗口关闭主窗口
- 13. 无关闭窗口的关闭窗口
- 14. 使用子窗口关闭父窗口。
- 15. 关闭tkinter窗口以及messagebox错误窗口
- 16. 当matplotlib窗口打开时关闭tkinter进度条窗口
- 17. 使用wmctrl关闭窗口
- 18. 使用pyatspi关闭窗口
- 19. Python 2.71.11 Tkinter窗口不关闭“应用程序没有响应”
- 20. 使用Tkinter iwant打开第二个窗口,然后关闭前一个窗口
- 21. 如何在使用后关闭tkinter按钮窗口?
- 22. “关闭窗口”按钮,使用Tkinter的时候不会工作+ GObject的
- 23. 关闭主窗口的Tkinter结合的关键
- 24. 关闭后如何使窗口可见?
- 25. 关闭窗口后关闭可可应用程序
- 26. 关闭可可中的主窗口?
- 27. 关闭窗口
- 28. 窗口不关闭GLFW
- 29. PyQt窗口不关闭
- 30. 模态窗口不关闭
如果你想让它成为_cos_ able,它必须是一个_sin_ed应用程序。 – TigerhawkT3
@ TigerhawkT3:坚持这个问题,不要切线。 :P – abarnert
无论如何,你的意思是“不可关闭”(假设你的意思是“不可关闭”)?你的意思是你不想要关闭盒子(Windows上右上角的X,Mac上左上角的红点等)?还是比这更多? – abarnert