Нужна помощь с tkinter и keyboard

Hazaker

Новичок
Пользователь
Сен 24, 2021
14
1
3
Не понимаю в чем ошибка:
Код:
from tkinter import *
import tkinter as tk
from PIL import ImageTk, Image
from time import sleep
import keyboard

def spint():

    var1 = var.get()
    if var1 == 0:
        keyboard.release('ctrl')
    elif var1 == 1:
        keyboard.press('ctrl')

autosprint = tk.Tk()
autosprint.resizable(False, False)
autosprint.geometry('300x160')

var = tk.IntVar()
rad0 = Radiobutton(autosprint, text="AutoSprint - Off", variable=var, value=0, command=spint)
rad1 = Radiobutton(autosprint, text="AutoSprint - On", variable=var, value=1, command=spint)

rad0.pack()
rad1.pack()
autosprint.mainloop()

Суть программы в том, что пользователь выбирает один из радиобаттонов и если выбран 1 то 'ctrl' не зажимается, а если 2 то зажимается.
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 595
461
83
функция spint выполняется только один раз после изменения состояния радиокнопки...
вам нужно постоянно проверять их состояние, чтобы интерфейс не залипал, можно сделать это в другом потоке...
 

Hazaker

Новичок
Пользователь
Сен 24, 2021
14
1
3
функция spint выполняется только один раз после изменения состояния радиокнопки...
вам нужно постоянно проверять их состояние, чтобы интерфейс не залипал, можно сделать это в другом потоке...
можно скинуть пример?
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 595
461
83
можно так
Python:
from tkinter import *
import tkinter as tk
from PIL import ImageTk, Image
from time import sleep
import keyboard
import threading


def spint():
    if var.get() == 0:
        return False
    elif var.get() == 1:
        return True


def thread():
    while True:
        if spint():
            # keyboard.press('ctrl')
            print("keyboard.press('ctrl')")


autosprint = tk.Tk()
autosprint.resizable(False, False)
autosprint.geometry('300x160')

var = tk.IntVar()
rad0 = Radiobutton(autosprint, text="AutoSprint - Off", variable=var, value=0, command=spint)
rad1 = Radiobutton(autosprint, text="AutoSprint - On", variable=var, value=1, command=spint)

rad0.pack()
rad1.pack()
thr = threading.Thread(target=thread, daemon=True)
thr.start()
autosprint.mainloop()

и еще забыл сказать, что keyboard.press не зажимает клавишу, а нажимает ее один раз...
 
Последнее редактирование:

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