Python Tkinter скрыть и показать окно с помощью горячих клавиш - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь написать программу, которую я могу скрыть и показать с помощью горячих клавиш.Мне удалось заставить приложение отображать и скрывать, используя библиотеку «клавиатура», однако из-за функции «ожидания» библиотеки это препятствует правильному функционированию текстового поля.Я пытался использовать привязки клавиш в 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 голосов
/ 28 мая 2018

Просто отбросьте эту команду ожидания, это дополнительная основная петля, которая не нужна, поскольку 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 НЕВОЗМОЖНО!Он всегда пытается «сохранить как ...», чего я не хочу ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...