Как запустить форму tkinter без фокуса? - PullRequest
0 голосов
/ 02 июля 2019

Как я могу запустить приложение tkinter, которое не фокусируется, но остается всегда сверху?

Я использую библиотеку, которая вводит символы, как если бы они были введены с клавиатуры, и я хочусоздать приложение tkinter, которое показывает пользователю различные символы (виртуальную клавиатуру), но для ввода символов интересующее приложение должно иметь фокус, и я хочу, чтобы виртуальная клавиатура оставалась сверху (без взятияfocus).

Вот что я пробовал: в этом коде я минимизирую окно перед написанием символа, поэтому интересующее приложение фокусируется при написании символа, после чего я снова показываю окно:

from pynput.keyboard import Key, Controller
import tkinter as tk
import time

keyboard = Controller()

########################################################################
class MyApp(object):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        self.root = parent
        self.root.title("Special Characters")
        self.frame = tk.Frame(parent)
        self.frame.bind("<Enter>", self.onHover)
        self.frame.pack()

        btn01 = tk.Button(self.frame, text="á", command=lambda: self.printChar('á')).grid(row=0,column=0)
        btn02 = tk.Button(self.frame, text="é", command=lambda: self.printChar('é')).grid(row=0,column=1)
        btn03 = tk.Button(self.frame, text="í", command=lambda: self.printChar('í')).grid(row=0,column=2)
        btn04 = tk.Button(self.frame, text="ó", command=lambda: self.printChar('ó')).grid(row=1,column=0)
        btn05 = tk.Button(self.frame, text="ú", command=lambda: self.printChar('ú')).grid(row=1,column=1)
        btn06 = tk.Button(self.frame, text="ñ", command=lambda: self.printChar('ñ')).grid(row=1,column=2)
        btn07 = tk.Button(self.frame, text="Á", command=lambda: self.printChar('Á')).grid(row=2,column=0)
        btn08 = tk.Button(self.frame, text="É", command=lambda: self.printChar('É')).grid(row=2,column=1)
        btn09 = tk.Button(self.frame, text="Í", command=lambda: self.printChar('Í')).grid(row=2,column=2)
        btn10 = tk.Button(self.frame, text="Ó", command=lambda: self.printChar('Ó')).grid(row=3,column=0)
        btn11 = tk.Button(self.frame, text="Ú", command=lambda: self.printChar('Ú')).grid(row=3,column=1)
        btn12 = tk.Button(self.frame, text="Ñ", command=lambda: self.printChar('Ñ')).grid(row=3,column=2)

        btnClose = tk.Button(self.frame, text="Close", command=self.closeWindow).grid(row=4,column=0,columnspan=3,rowspan=1)

    #----------------------------------------------------------------------

    def onHover(self, event):
        self.root.focus_force()

    def printChar(self, character):
        """"""
        self.root.withdraw()

        time.sleep(0.1)
        keyboard.press(character)
        keyboard.release(character)
        time.sleep(0.1)

        self.root.deiconify()

    def closeWindow(self):
        self.root.destroy()

#----------------------------------------------------------------------
if __name__ == "__main__":
    root = tk.Tk()
    root.geometry("300x200")
    root.call('wm', 'attributes', '.', '-topmost', '1')
    app = MyApp(root)
    root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...