@Arkady2020

Как переключать язык через radibutton?

Всем добра. Только начал изучать программирование. Есть такой код на питоне:
i
import translators as ts
import pyperclip
import keyboard
while True:
    keyboard.wait("ctrl+alt+t")
    print('переводим:')
    bufer = pyperclip.paste()
    print(bufer)
    perevod = ts.google(bufer, to_language='ru')
    pyperclip.copy(perevod)
    print(perevod)

Хочется иметь возможность выбирать язык через меню радиокнопок:
from tkinter import *

def sel():
  selection = var.get()
  label.config(text = selection)
    
root = Tk()
var = StringVar()
R1 = Radiobutton(root, text="русский", variable=var, value='ru', command=sel).pack( anchor = W )
R2 = Radiobutton(root, text="английский", variable=var, value='en', command=sel).pack( anchor = W )
R3 = Radiobutton(root, text="японский", variable=var, value='ja', command=sel).pack( anchor = W )

label = Label(root)
label.pack()
root.mainloop()

Как это сделать? У меня не получается подружить эти строчки вместе.
  • Вопрос задан
  • 40 просмотров
Решения вопроса 1
@Vindicar
Не получается по вполне очевидной причине.
Как следует из названия, root.mainloop() входит в бесконечный цикл, и крутится там, пока окно не будет закрыто. Это считается завершением программы, и только тогда mainloop() возвращает управление.

А нажатие кнопки у тебя тоже реализовано через бесконечный цикл. Разумеется, работать может только один из них.
Я бы посоветовал почитать повнимательнее доки на keyboard, и выкинуть цикл while True и вызов keyboard.wait().
Вместо этого, либо попробуй добавить обработчик через keyboard.add_hotkey(), либо попробуй запланировать вызов своей функции через root.after().
Внутри этой функции используй keyboard.is_pressed(), чтобы узнать, нажата ли клавиша. Тут будет ещё пачка подводных камней - нужно будет повторно запланировать вызов этой же функции, нужно будет игнорировать нажатие клавиш, если перевод уже сделали (чтобы пока держишь клавиши, комп не переводил непрерывно), и т.п.
Первый способ проще, но нужно проверить, сработает ли.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы