Как я могу поместить этот скрипт в функцию? - PullRequest
0 голосов
/ 08 июля 2019

Я хочу сначала отобразить текст и удалить его через секунду, и в течение этого времени сохранять работоспособность программного обеспечения (то есть предотвращать цикл), получать текст и отображать его повторно.

Я хочу, чтобы это было в форме функции

Я хочу отображать текст каждой клавишей, и текстовая операция выполняется в функции

import keyboard
import pynput
import tkinter, win32api, win32con, pywintypes
def printer(text):
    label = tkinter.Label(text=text, font=('Times New Roman','16'), fg='white', bg='blue')
    label.master.overrideredirect(True)
    label.master.geometry("+0+0")
    label.master.lift()
    label.master.wm_attributes("-topmost", True)
    label.master.wm_attributes("-disabled", True)
    label.master.wm_attributes("-transparentcolor", "blue")
    hWindow = pywintypes.HANDLE(int(label.master.frame(), 16))
    exStyle = win32con.WS_EX_COMPOSITED | win32con.WS_EX_LAYERED | win32con.WS_EX_NOACTIVATE | win32con.WS_EX_TOPMOST | win32con.WS_EX_TRANSPARENT
    win32api.SetWindowLong(hWindow, win32con.GWL_EXSTYLE, exStyle)
    label.pack()
    label.after(1000, lambda:label.config(text=''))
    label.mainloop()
pressedList = ''
def on_press(key):
    global pressedList
    try:
        pressedKey = key.char # single-char keys
    except:
        pressedKey = key.name # other keys
    pressedList += pressedKey


    if pressedList.rfind('a')+len('a') == len(pressedList) and pressedList[pressedList.rfind('a'):] == 'a':
        printer('a')
    elif pressedList.rfind('f1')+len('f1') == len(pressedList) and pressedList[pressedList.rfind('f1'):] == 'f1' and pressedKey == 'f1':
        printer('f1')
    else:
        printer('pass')
        pass
lis = pynput.keyboard.Listener(on_press=on_press)
lis.start()
lis.join()

1 Ответ

0 голосов
/ 09 июля 2019

Возможно, вам не нужно смешивать tkinter с другими слушателями событий;привязка keypress к окну tkinter сделает то, что вам нужно:

import tkinter as tk


def display_key(e=None):
    if e is not None:
        tv.set(e.keysym)
        root.after(1000, display_key)
    else:
        tv.set('-')


root = tk.Tk()
root.geometry('300x200')
tv = tk.StringVar()
tv.set('-')
label = tk.Label(root, textvariable=tv)
label.config(font=("Courier", 144))
label.pack(expand=True, fill='both')

root.bind('<Key>', display_key)

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