Python Tkinter通过热键隐藏和显示窗口

时间:2018-05-28 16:31:53

标签: python tkinter hotkeys

我正在尝试编写一个可以通过热键隐藏和显示的程序。我设法让应用程序显示和隐藏使用库“键盘”,但由于库的“等待”功能,它会阻止文本框正常运行。我尝试过使用Tkinter中的键绑定,但是我有一个不同的问题,一旦程序被隐藏或选择了另一个应用程序,我就无法通过热键将焦点返回到隐藏窗口。

import Tkinter as Tk
import keyboard

class MyApp(object):

    def __init__(self, parent):
        self.root = parent
        self.root.title("Main frame")

        self.frame = Tk.Frame(parent)
        self.frame.pack()

        self.editor = Tk.Text(self.frame)
        self.editor.pack()
        self.editor.config(font="Courier 12")
        self.editor.focus_set()


        keyboard.add_hotkey('ctrl+alt+s', self.show)
        keyboard.add_hotkey('ctrl+alt+h', self.hide)
        keyboard.wait()

        self.root.withdraw() 


    def show(self):
        self.root.update()
        self.root.deiconify()

    def hide(self):
        self.root.withdraw()


if __name__ == "__main__":
    root = Tk.Tk()
    root.geometry("800x600")
    app = MyApp(root)
    root.mainloop()

任何帮助都会很棒:)

1 个答案:

答案 0 :(得分:2)

只需删除这个等待命令,它是一个额外的主循环,当Tkinter完成它的工作时不需要它。我尝试用线程修复你的问题,但是因为我想确切地检查什么是无效的,我意外地做了我想你想要的。所以守则是:

import Tkinter as Tk
import keyboard

class MyApp(object):

    def __init__(self, parent):
        self.root = parent
        self.root.title("Main frame")

        self.frame = Tk.Frame(parent)
        self.frame.pack()

        self.editor = Tk.Text(self.frame)
        self.editor.pack()
        self.editor.config(font="Courier 12")
        self.editor.focus_set()


        keyboard.add_hotkey('ctrl+alt+s', self.show)
        keyboard.add_hotkey('ctrl+alt+h', self.hide)


    def show(self):
        self.root.update()
        self.root.deiconify()

    def hide(self):
        self.root.update()
        self.root.withdraw()


if __name__ == "__main__":
    root = Tk.Tk()
    root.geometry("800x600")
    app = MyApp(root)
    root.mainloop()

我希望这适合你。我还建议您更改此密钥设置。使用PyZo进行测试是不可能的!它总是试图保存为......",我不想......