Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在不删除标题栏的情况下禁用Tkinter窗口的移动_Python_Python 3.x_Windows_Tkinter - Fatal编程技术网

Python 如何在不删除标题栏的情况下禁用Tkinter窗口的移动

Python 如何在不删除标题栏的情况下禁用Tkinter窗口的移动,python,python-3.x,windows,tkinter,Python,Python 3.x,Windows,Tkinter,我一直在为参加考试创建一个应用程序。因此,为此,我必须做两件事。 首先,禁用Tkinter窗口的拖动,不要让用户关注其他窗口,而不是我的应用程序窗口。这意味着我想使我的应用程序在我的应用程序正在使用时不能使用其他应用程序。尝试以下方法: 将tkinter作为tk导入 类FocusedWindow(tk.tk): 定义初始(自我,**kwargs): 超级() #强迫它变得不可模仿 super().overrideredirect(True) #强制它始终位于顶部 super().属性(“-top

我一直在为参加考试创建一个应用程序。因此,为此,我必须做两件事。 首先,禁用Tkinter窗口的拖动,不要让用户关注其他窗口,而不是我的应用程序窗口。这意味着我想使我的应用程序在我的应用程序正在使用时不能使用其他应用程序。

尝试以下方法:

将tkinter作为tk导入
类FocusedWindow(tk.tk):
定义初始(自我,**kwargs):
超级()
#强迫它变得不可模仿
super().overrideredirect(True)
#强制它始终位于顶部
super().属性(“-top”,True)
#即使用户取消了对它的处理,也要对它进行聚焦
super().bind(“,lambda事件:self.focus\u force())
#占据整个屏幕
width=super().winfo_screenwidth()
高度=super().winfo_屏幕高度()
super().几何体(“%ix%i+0+0”%(宽度、高度))
root=FocusedWindow()
#您可以像使用普通的'tk.tk()一样使用它`
button=tk.button(root,text=“Exit”,command=root.destroy)
button.pack()
root.mainloop()

这删除了标题栏,但您始终可以使用
tkinter.Label
s和
tkinter.Button
s创建自己的标题栏。我尝试使用标题栏使其正常工作,但由于某些原因,我无法重新调整窗口的焦点。

一种方法是通过以下方法,另一种方法是覆盖tkinter的
.geometry()
方法

在下面的代码中,我只是通过使用
winfo_rootx
winfo_rooty
获得了这个位置。在此之后,您可以通过在每次配置窗口时绑定事件来调用geometry方法来强制窗口

import tkinter as tk

def get_pos():
    global x,y
    x = root.winfo_rootx()
    y = root.winfo_rooty()
def fix_pos():
    root.bind('<Configure>', stay_at)
def stay_at(event):
    root.geometry('+%s+%s' % (x,y))

root = tk.Tk()
button1 = tk.Button(root, text='get_pos', command=get_pos)
button2 = tk.Button(root, text='fix_pos', command=fix_pos)

button1.pack()
button2.pack()

root.mainloop()
将tkinter作为tk导入
def get_pos():
全局x,y
x=root.winfo_rootx()
y=root.winfo_rooty()
def fix_pos():
根绑定(“”,停留在)
def停留时间(活动):
几何体(“++%s++%s%”(x,y))
root=tk.tk()
button1=tk.Button(根,text='get\u pos',command=get\u pos)
button2=tk.Button(根,text='fix\u pos',command=fix\u pos)
按钮1.pack()
按钮2.pack()
root.mainloop()

您使用的是Windows还是Linux?还有,为什么要保留标题栏?用户始终可以使用最小化按钮最小化窗口。@Lizzard我在Windows10上,如果有任何解决方案,请删除标题栏。我的主要座右铭是,在我的应用程序正在使用时,不允许用户使用任何其他应用程序。我正在考虑强制将窗口置于所有应用程序之上,当未聚焦时,它将再次强制聚焦。如果没有标题栏,这将更容易实现,但我也会尝试使用标题栏给出解决方案。对
grab
方法进行一些研究。@BryanOakley我已经尝试过了,即使是所谓的邪恶方法。至少对我来说,它没有成功。我仍然能够在其他窗口对焦。这对于测试应用程序来说并不理想:D@TheLizzard我相信你可以告诉他。非常感谢你,我真的很感谢你,希望你能提供你的GitHub ID,因为我会将你添加为贡献者。@AakarshKumar我自己有几个GitHub项目,但如果你想要的话,是吗。