如何在Tkinter中隐藏或禁用鼠标指针?

时间:2013-12-07 21:19:44

标签: python tkinter mouse

我有一个不需要鼠标的全屏Tkinter Python应用程序 - 下面是简化版本。它会打开全屏,并在按F1时激活文本小部件。

import Tkinter as tk

class App():
    def __init__(self):
        self.root = tk.Tk()
        self.root.attributes('-fullscreen', True)
        self.root.configure(background='red')
        self.root.bind('<F1>', self.opennote)
        self.root.bind('<F2>', self.closenote)
        self.root.bind('<F3>', self.quit)
        l = tk.Label(text="some text here")
        l.pack()
        self.root.mainloop()

    def opennote(self, event):
        self.n = tk.Text(self.root, background='blue')
        self.n.pack()

    def closenote(self, event):
        self.n.destroy()

    def quit(self, event):
        self.root.destroy()

App()

启动时,鼠标指针不可见。但是,在启动Text小部件后,它会变得可见,然后停留(在文本框架和屏幕的其余部分之间改变形状)。

我发现了一些关于如何隐藏鼠标光标的文章(通过在参数中使用cursor=''),但是我找不到任何可以在小部件上使用鼠标指针的文章。

是否可以在Tkinter中完全隐藏(或禁用)鼠标指针?

a question on how to set the mouse position帮助我通过发出self.root.event_generate('<Motion>', warp=True, x=self.root.winfo_screenwidth(), y=self.root.winfo_screenheight())来移动这个光标。这不是一个解决方案,但至少指针不会从屏幕中间跳到一个人的脸上)

2 个答案:

答案 0 :(得分:19)

我想,

root.config(cursor="none")应该有用。

答案 1 :(得分:5)

我最接近的是创建一个Frame并将光标设置为'none',但它仍然存在一个问题,即要求光标离开并重新进入应用程序窗口,至少在我的机器(Mac OS X Mavericks)。也许其他人可以弄清楚如何在应用程序加载时触发光标消失,但这是我到目前为止的代码:

import Tkinter as tk


class App():
    def __init__(self):
        self.root = tk.Tk()
        self.root.attributes('-fullscreen', True)
        self.main_frame = tk.Frame(self.root)
        self.main_frame.config(background='red', cursor='none')
        self.main_frame.pack(fill=tk.BOTH, expand=tk.TRUE)
        self.root.bind('<F1>', self.opennote)
        self.root.bind('<F2>', self.closenote)
        self.root.bind('<F3>', self.quit)
        l = tk.Label(self.main_frame, text="some text here")
        l.pack()
        self.root.mainloop()

    def opennote(self, event):
        self.n = tk.Text(self.main_frame, background='blue')
        self.n.pack()

    def closenote(self, event):
        self.n.destroy()

    def quit(self, event):
        self.root.destroy()

App()