Активация и деактивация на одну кнопку keyboard

Anonimus2134

Новичок
Пользователь
Апр 22, 2020
15
0
1
Дана функция где выполняется код:
Python:
def helloworld():
    while True:
        print("Hello, world!")
Как сделать чтобы можно было нажать 1 раз на клавишу, к примеру f9, то код активируется, но если снова нажать f9, то код прекращает работу и опять по новой. Искал в интернете - не нашел, попробовал через boolean, но что - то не получилось
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 566
454
83
Все работает! Спасибо, но можно сделать чтобы на одну и ту же кнопку активировалось и деактивировалось?
Python:
import keyboard


class HelloWold:
    def __init__(self):
        self.status = False
        keyboard.add_hotkey('f9', self.start_stop)

    def start_stop(self):
        self.status = not self.status

    def run(self):
        while True:
            if self.status:
                print('hello world')
                continue
            else:
                continue


helloworld = HelloWold()
helloworld.run()
 
  • Мне нравится
Реакции: Anonimus2134

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 566
454
83
я так понимаю вам нужно через модуль keyboard...

вот пример с глобальной переменной
Python:
import keyboard
import time

status = False


def start():
    global status
    status = True


def stop():
    global status
    status = False


keyboard.add_hotkey('b', start)  # при нажатии на b цикл попадает в блок if и печатает
keyboard.add_hotkey('e', stop)  # при нажатии на e цикл попадает в блок else и ждет

while True:
    if status:
        print('hello world')
        continue
    else:
        continue

вот пример с классом, таким образом мы избавились от глобальной переменной
Python:
import keyboard
import time


class HelloWold:
    def __init__(self):
        self.status = False
        keyboard.add_hotkey('b', self.start)  # при нажатии на b цикл попадает в блок if и печатает
        keyboard.add_hotkey('e', self.stop)  # при нажатии на e цикл попадает в блок else и ждет

    def start(self):
        self.status = True

    def stop(self):
        self.status = False

    def run(self):
        while True:
            if self.status:
                print('hello world')
                continue
            else:
                continue


helloworld = HelloWold()
helloworld.run()

так же это можно реализовать через сигналы и таймеры, через вин апи...
 
  • Мне нравится
Реакции: Anonimus2134

abc

Новичок
Пользователь
Мар 17, 2021
7
4
3
Просто в функции start делайте так:

self.status = not status
 
  • Мне нравится
Реакции: Anonimus2134

Anonimus2134

Новичок
Пользователь
Апр 22, 2020
15
0
1
я так понимаю вам нужно через модуль keyboard...

вот пример с глобальной переменной
Python:
import keyboard
import time

status = False


def start():
    global status
    status = True


def stop():
    global status
    status = False


keyboard.add_hotkey('b', start)  # при нажатии на b цикл попадает в блок if и печатает
keyboard.add_hotkey('e', stop)  # при нажатии на e цикл попадает в блок else и ждет

while True:
    if status:
        print('hello world')
        continue
    else:
        continue

вот пример с классом, таким образом мы избавились от глобальной переменной
Python:
import keyboard
import time


class HelloWold:
    def __init__(self):
        self.status = False
        keyboard.add_hotkey('b', self.start)  # при нажатии на b цикл попадает в блок if и печатает
        keyboard.add_hotkey('e', self.stop)  # при нажатии на e цикл попадает в блок else и ждет

    def start(self):
        self.status = True

    def stop(self):
        self.status = False

    def run(self):
        while True:
            if self.status:
                print('hello world')
                continue
            else:
                continue


helloworld = HelloWold()
helloworld.run()

так же это можно реализовать через сигналы и таймеры, через вин апи...
Все работает! Спасибо, но можно сделать чтобы на одну и ту же кнопку активировалось и деактивировалось?
 

Форум IT Специалистов