Ir ao conteúdo

Posts recomendados

Postado

Bom dia.

Minha dúvida é como fazer o widget "Entry" receber a tecla "F5".
Meu código está assim:

tecla = Label(janela, text='Tecla para ativar/desativar:', font='arial 15 bold', bg='black', fg='white')
tecla.place(x=3, y=130)
valor_da_tecla = Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white')
valor_da_tecla.place(x=270, y=131)
info_tecla = Label(janela, text='Info: Aperte qualquer tecla', font='arial 9 italic', bg='black', fg='white')
info_tecla.place(x=270, y=161)

 

O "Entry" não recebe as teclas "F1" ao "F12". Eu queria que recebesse. Tem como fazer isso?

Postado

Olha não sei se vai te servir mas tem o módulo Keyboard para Python que serve para isso, assumir controle total do teclado, dá uma olhada em: https://pypi.org/project/keyboard/

Basta instalar ele no seu python com o comando pip install keyboard, se voce tiver o pip instalado

 

Fora isso voce tem o módulo TKinter

Aqui tem um tutorial mostrando como saber a tecla que foi pressionada: https://www.ehow.com.br/obter-teclas-pressionadas-python-como_33470/

 

A partir desse conhecimento, usando qualquer um desses dois módulos, voce tem que fazer uma verificação, no caso, fazer uma condicional IF perguntando se a tecla que foi pressionada é == 116, se for, faça alguma coisa...do contrário, faça nada....

 

Essa seria a lógica de escutar uma tecla.

 

Se me lembro bem o valor das teclas de função, elas começam em F1=112, F2=113, F3=114, etc..., mas o aplicativo vai te dar essa certeza!

 

Quando você implementar essa verificação, independente do que optou instalar Keyboard ou TKinter, poste aqui suas dúvidas, que vejo se posso lhe ajudar.

 

Boa sorte e bons estudos!👍

Postado

entendi.
Então, eu deveria ter estendido um pouquinho mais o tópico e falado que eu já tentei trabalhar com a biblioteca "Keyboard". "tkinter" eu já estou trabalhando.

Eu tentei trabalhar com "Keyboard" para esse caso mas não consegui. Ele simplesmente dá erro quando vou executar o código. Vou dar exemplos de como eu tentei:

 

keyboard.press_and_release(Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white'))
keyboard.write(Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white'))
keyboard.add_hotkey(Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white'))
keyboard.wait(Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white'))
keyboard.record(Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white'))
keyboard.play(Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white'))
keyboard.add_abbreviation(Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white'))
keyboard.read_hotkey(Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white'))
keyboard.add_hotkey(Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white'))

 

Ou seja, usei todos que eu li sobre - alguns nem servem para o meu caso mas mesmo assim, eu testei - e passei como parâmentro o widget "Entry".
Também tentei usar passando essas mesmas funções dentro do parâmetro do "Entry", colocando-o como primeiro parâmetro e como parâmetro da mesma eu passei "janela". Desse jeito aqui ó:

 

Entry(keyboard.read_hotkey(janela), font='arial 15 bold', width=5, bg='black', fg='white')

 

Também testei com todos os outros e não deu. Dá erro ao executar.

No mais, quando eu deixo sem nada, ele não recebe a tecla "F5", por exemplo. Eu aperto a tecla "F5" no campo respectivo e não aparece nada. E mesmo que eu consiga usar a biblioteca "Keyboard" para esse caso, não creio que vá fazer o "Entry" reconhecer a tecla "F5", por exemplo.

Eu até fiz testes com a biblioteca "Keyboard" antes de implementar no meu código pra mim saber como funciona e tal, mas, não consegui nenhum resultado ao tentar implementar as funções da respectiva biblioteca no meu código.

Alguma ideia?

Postado

Lamento, mas não consigo te ajudar com o Tkinter, essa biblioteca eu simplesmente pulei ela dos meus estudos por achar ela inútil(é uma ignorância da minha parte, admito, porém acho tem melhores que ela), mas vamos lá!

 

O Keyboard funciona muito bem, eu não consigo entender porque você não está conseguindo usar.

 

Faz assim, para ter certeza que o keyboard está sendo executado, cria um arquivo main.py e coloca esse código dentro e salva.

import keyboard

# Pede ao keyboard que escreva a frase
keyboard.write('Esae, escolha no menu o que deve ser feito agora!')

# Pede ao keyboard que pressione a tecla
keyboard.press_and_release('f7')

Se estiver trabalhando com VirtualEnv ative ela, e se certifique que o keyboard está instalado nela, se não, se você instalou o keyboard diretamente no python, abra o seu console do windows(cmd) e dentro da pasta onde está o seu main.py, execute o arquivo: python main.py

 

Veja no meu exemplo abaixo

image.png.4e55f66a498b870445f00145afc6fe33.png

 

Ao executar esse script é isso abaixo que deve acontecer.

image.png.744ddea1b1b0c7e45f9daee3433db975.png

 

A tecla F7 abre um menu para repetir os comandos que você executou desde que ela foi aberta.

Se tudo correu como acima o keyboard está funcionando, basta você ver na documentação de exemplos de uso a parte:

# Blocks until you press esc. (Bloqueia até você pressionar esc)
keyboard.wait('esc')
#voce pode colocar o evento ou os comandos da sua regra de negócios após essa linha, por exemplo:
print('A tecla ESC acabou de ser pressionada!')


# no exemplo usei esc, mas pode colocar ali direamente ('f5').
# Se executar isso no pycharm ela vai chamar a função "copy" do Pycharm, portanto execute na sua virtualenv ou no console

Um exemplo usando o próprio PyCharm para sofrer as ações de teclas:

import keyboard

print('\n[1] - O Keyboard vai escreve uma frase.\n[2] - O Keyboard abrir a caixa de busca do PyCharm.\n')

opt = int(input('Escolha "1" ou "2" para o keyboard fazer algo: '))

if opt == 1:
    keyboard.write("Frase!")
elif opt ==2:
    keyboard.press_and_release('f3')

execute no seu Pycharm e veja os dois resultados como abaixo!

image.png.fbedce3295d020f101e96c6a1bd2c453.png

 

e olha o que grifei em amarelo

image.png.aa82bfe0f76d0dc6e37651af803c9d89.png

 

Funciona!

Mas você precisa ver como vai implementar isso dentro do seu programa.

 

Qualquer dúvida deixe mensagem, Boa sorte!👍

 

Postado

@fspjonnyNão, tudo bem. Como eu disse antes, eu testei a Keyboard antes de implementar no meu código e fiz os testes tudo direitinho só que, quando eu tento implementar no meu código junto com tkinter, dá erro. O Entry simplesmente não aceita.

Eu queria saber um modo pra tentar fazer com que o Entry aceite qualquer tecla do teclado.

Pelo visto, não tem como fazer. Mas vou continuar tentando. É a primeira vez que estou tentando criar um executável todo em Python e queria muito finalizá-lo.

Postado
1 minuto atrás, Esae disse:

Não, tudo bem. Como eu disse antes, eu testei a Keyboard antes de implementar no meu código e fiz os testes tudo direitinho só que, quando eu tento implementar no meu código junto com tkinter, dá erro. O Entry simplesmente não aceita.

Eu queria saber um modo pra tentar fazer com que o Entry aceite qualquer tecla do teclado.

Pelo visto, não tem como fazer. Mas vou continuar tentando. É a primeira vez que estou tentando criar um executável todo em Python e queria muito finalizá-lo.

Pelo pouco que li do Tkinter, o Entry é um dos módulos dele...e a função dele acho que era só retorna frase, ou algo do tipo, me corrija se eu estiver errado

adicionado 1 minuto depois

achei isso aqui sobre o Entry: https://effbot.org/tkinterbook/entry.htm

Postado

Sim. Só que nesse mesmo código, eu tenho outros dois Entry e que, com uma função, eu fiz o conteúdo digitado nesse Entry virar um conteúdo do tipo Float.

Eu também tentei usar o Keyboard da mesma forma só que sem sucesso.

Postado
1 minuto atrás, Esae disse:

Sim. Só que nesse mesmo código, eu tenho outros dois Entry e que, com uma função, eu fiz o conteúdo digitado nesse Entry virar um conteúdo do tipo Float.

Eu também tentei usar o Keyboard da mesma forma só que sem sucesso.

mas o que seu código deveria fazer?...deve ter uma outra forma de fazer isso.

Eu gostaria de saber a finalidade dele...talvez eu tenha alguma outra solução para esse problema.

Postado

A finalidade dele é Auto-Click.
Só que eu quero que ele receba valores configurados e não que seja já pré-configurado e funcione só nessa pré-configuração.

Postado
4 minutos atrás, Esae disse:

A finalidade dele é Auto-Click.
Só que eu quero que ele receba valores configurados e não que seja já pré-configurado e funcione só nessa pré-configuração.

 

O ideal seria você postar o código fonte inteiro para análise por outras pessoas, pois do jeito que está, não tá compreensível o que deve ser feito e dificulta ajudar.

Postado

@fspjonny

Assim que está o código.

 

from tkinter import *
import keyboard

def conversão():
    '''Verificando o valor digitado no campo "Click(s):"'''
    verificação_valor_do_click = float(valor_do_click.get())
    if verificação_valor_do_click < 1.0:
        verificação_valor_do_click = 1.0
    elif verificação_valor_do_click > 3.0:
        verificação_valor_do_click = 3.0
    print(verificação_valor_do_click, type(verificação_valor_do_click))
    '''Verificando o valor digitado no campo "Intervalo entre o(s) click(s):"'''
    verificação_valor_do_intervalo = float(valor_do_intervalo.get())
    if verificação_valor_do_intervalo < 1.0:
        verificação_valor_do_intervalo = 1.0
    elif verificação_valor_do_intervalo > 10.0:
        verificação_valor_do_intervalo = 10.0
    print(verificação_valor_do_intervalo, type(verificação_valor_do_intervalo))

def captura():
    '''Capturando a tecla digitada no campo "Tecla para ativar/desativar:"'''
    #verificação_valor_da_tecla =

'''Configurações da janela'''
janela = Tk()
janela.title('eAutoClick')
janela.geometry('500x250')
janela['bg'] = 'black'

#                            '''Configurações dos widgets da janela'''
'''Quantidade de Click(s)'''
click = Label(janela, text='Click(s):', font='arial 15 bold', bg='black', fg='white')
click.place(x=183, y=20)
valor_do_click = Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white')
valor_do_click.place(x=270, y=21)
info_click = Label(janela, text='Mín: 1.0 | Máx: 3.0', font='arial 9 italic', bg='black', fg='white')
info_click.place(x=270, y=51)

'''Intervalo entre o(s) Click(s)'''
intervalo = Label(janela, text='Intervalo entre o(s) click(s):', font='arial 15 bold', bg='black', fg='white')
intervalo.place(x=0, y=75)
valor_do_intervalo = Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white')
valor_do_intervalo.place(x=270, y=76)
info_intervalo = Label(janela, text='Mín: 1.0 | Máx: 10.0', font='arial 9 italic', bg='black', fg='white')
info_intervalo.place(x=270, y=106)

'''Tecla para ativar/desativar o Auto-Click'''
tecla = Label(janela, text='Tecla para ativar/desativar:', font='arial 15 bold', bg='black', fg='white')
tecla.place(x=3, y=130)
valor_da_tecla = Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white')
valor_da_tecla.place(x=270, y=131)
info_tecla = Label(janela, text='Info: Aperte qualquer tecla', font='arial 9 italic', bg='black', fg='white')
info_tecla.place(x=270, y=161)

'''Botão para ligar'''
ligar = Button(janela, text='LIGAR', font='arial 15 bold', width=41, bg='black', fg='white', command=conversão)
ligar.place(x=0, y=200)
'''------------------------------------------------------------------------------------------------------------------'''
janela.mainloop()

 

Postado

Minha dificuldade está em entender o TKinter, acho que por isso não me interessei por ele, muito complicado e pouco utilizável.

 

Olhando em outros fóruns achei se seguinte conversa:

     

Citação

Vou explicar detalhadamente o que gostaria.
Tenho um ENTRY onde o usuario vai digitar um certo codigo, por exemplo: "etn 2421".
Vamos supor que este codigo seja uma placa de um carro (pode ser qualquer coisa!)
No entanto, em meu banco, todas as placas de carro tem suas letras em maiusculas.
Mas, a marca do veiculo nao esta gravada com todas as letras maiusculas (Ford, Wolks...).
Entao, nao posso travar a procura somente por letras maiusculas.
Nos controles (widgets) de procura de placas tenho q travar tudo em maiusculas. E nao posso deixar para o usuario lembrar disso.
O sistema vai se preocupar em trocar tudo por maiusculas, quando for o caso. E deixar livre, quando nao importar maiusculas de minusculas.
O que estou parado eh em uma maldita tela de procura. Esta tela tem varios widgets que sao os parametros de procura: Nome, placa, ano, RENAVAM....
Gostaria q quando o usuario entrasse em um widget que fosse importante maiusculas o sistema vah trocando o conteudo (em RunTime) para maiusculas.
Por exemplo:

Procurando por: ETN 1234
Pressionado: e ---> trocado por E
Pressionado: t ---> trocado por ET
Pressionado: n ---> trocado por ETN
Pressionado: [espaco] ---> [espaco]
Pressionado: 1234 ---> trocado por ETN 1234

 

Pelo Python em sí só bastava a variável que recebe a placa digitada, repassar o valor como: variavel.upper() e fim da história.

 

No entanto....

 

Citação

Oi Murilo  -

Então, ao usar Tkinter, aplicações que só consomem formulaŕios
preenchidos em geral podem só
adicionar callbacks para entradas de menus e para a chave "command" dos botões.

Quando queremos modificar o funcionamento padrão dos widgets, temos
que escutar eventos
de outras formas - no caso, para saber quando uma tecla foi
pressionada em uma entrada,
podemos usar o método bind, capturando o evento "<Key>".

Algo do tipo

entrada.bind("<key>", mudar_texto_do_widget_para_maiusculas)

Se o <key> fosse gerado depois da tecla ser processada, seria só isso: só que
os <Key> é gerado antes da tecla ser adicioanda ao texto da entrada.
Isso gera um problema
por que se ao receber o evento você tentar mudar tudo pra maiusculas,
a tecla digitada ainda fica inalterada.

Uma vez que o tkitner nao tem eventos mais esepcializados (pro exemplo
"KeyUp" ou um
"Changed" para o entry), a solução então é ao tratar o evendo <Key>
agendar um timer para
chamar um método que vai passar o texto do widget para maiúsculas:

Veja a documentação de eventos em:

http://effbot.org/tkinterbook/tkinter-events-and-bindings.html

Eu escrevi um pequeno exemplo de como pode funcionar:

 

O exemplo dele é esse aqui:

import tkinter

window = tkinter.Tk()
text = tkinter.Variable()
entry = tkinter.Entry(window, textvariable=text)
entry.pack()

def key_handler(variable, event):
    if hasattr(event, "char") and event.char:
        event.widget.after(30, lambda: set_to_upper(variable))

def set_to_upper(variable):
    variable.set(variable.get().upper())

entry.bind("<Key>", lambda event: key_handler(text, event))

tkinter.mainloop()

Acho que com isso você consegue o que quer, remove a função que faz "upper" e direciona o valor de key para atribuir a variável do seu formulário.

Tentei fazer aqui, mas me deu um monte de erros do Tkinter que me fez querer parar de programar na hora...tá me dando até conflito de versões do Python 2 do Tk com o meu 3.

 

 

Outra forma de captura de tecla com o TKinter que achei foi essa aqui:

import tkinter as tk

def keypress(event):
    if event.keysym == 'Escape':
        mainRoot.destroy()
        keyPressed = event.char
        print("Você pressionou: " + keyPressed)

mainRoot =  tk.Tk()
print("Press a key (Escape key to exit): ")
mainRoot.bind_all('', keypress)
mainRoot.withdraw()
mainRoot.mainloop()

Espero que te ajude!

 

 

Postado

De fato, ajuda mas, não funciona para o que eu quero. Acho que não tem jeito do Entry reconhecer as teclas do "F1 ao F12".
É *****... Parece que python só serve como complemento mesmo 😕 desanimei.

Postado

@brund321 Porque eu quero que receba qualquer tecla do teclado, simplesmente isso.
Eu até posso fazer de um jeito em que para ativar o Auto-Click, teria que apertar o F5, ou seja, já pré-determinado/pré-configurado. Mas eu queria conseguir fazer com que recebesse qualquer tecla do teclado. Se eu conseguisse isso, a próxima meta seria reconhecer qualquer botão do mouse (além dos 3 botões padrões).

Sacou?

Postado

@Esae Oh, agora entendi o que você está tentando fazer. Eu não tenho nenhuma experiência com tkinter, o que eu consegui achar foi isso 😄 :

from tkinter import *

root = Tk()

def key(event):
    print(repr(event.char))

frame = Frame(root, width=100, height=100)
frame.bind("<Key>", key)
frame.pack()

root.mainloop()

Abraço

Postado

@brund321 Velho, funcionou em parte kk. Eu agora estou aprimorando para o meu código.
Do jeito que você me indicou, ele fica imprimindo ao mesmo tempo no terminal assim que eu digito. Eu quero apenas guardar essa info em uma variável. Mas isso vai ser menos difícil pra mim. Agora só preciso achar um método para que interrompa esse problema e assim eu puder passar pra frente.

@fspjonny Muito obrigado também! Dos exemplos que você me mandou, não consegui pôr pra obter um resultado que eu esperava, mas, com certeza, vai servir pra mim agora, como parâmetro.

Postado

@brund321 Bom, agora ele tá reconhecendo qualquer tecla do meu teclado, porém, ele não mostra no widget "Entry".
Aí tentei usar o método "keyboard.write" e ele não escreve na hora, eu tenho que ficar apertando a tecla pra poder escrever no widget "Entry" em tempo real.
Aí vem outro problema, o meu programa fica em looping mesmo não contendo condição de repetição. Na maioria das vezes, ele trava.

Alguma ideia?
Desde que você me passou o código que eu estou tentando resolver, já tentei de tudo que é jeito e não deu.
Atualmente, meu código está assim:
 

E também tentei usando a biblioteca PyAutoGui. Não consegui, obti o mesmo resultado.

Até pesquisei por outras bibliotecas que trabalham com interface gráfica no Python mas, PyQt5 dá erro quando tento baixar. Eu acho que é porque eu estou usando Python 3.8. Não sei. Eu li aqui que, o PyQt5 é compatível mas, né... dá erro mesmo assim.

Tem o:
PySide - Versão do Python: 3.7 + (esse, se não me falha a memória, também deu erro ao tentar baixar)
Kivy - Versão do Python: 3.6 +
PyGtk - Versão do Python: 3.1 +
WxPython - Versão do Python: 3.7 +

Estou pensando seriamente em pular fora do barco ou integrar outra linguagem para conseguir executar essa tarefa porque tá *****.

adicionado 6 minutos depois

Tem também as bibliotecas PyGame e PyGlet.

Postado
6 horas atrás, Esae disse:

@brund321 Bom, agora ele tá reconhecendo qualquer tecla do meu teclado, porém, ele não mostra no widget "Entry".
Aí tentei usar o método "keyboard.write" e ele não escreve na hora, eu tenho que ficar apertando a tecla pra poder escrever no widget "Entry" em tempo real.
Aí vem outro problema, o meu programa fica em looping mesmo não contendo condição de repetição. Na maioria das vezes, ele trava.

Alguma ideia?
Desde que você me passou o código que eu estou tentando resolver, já tentei de tudo que é jeito e não deu.
Atualmente, meu código está assim:
 


from tkinter import *
import keyboard

def conversão():
    '''Verificando o valor digitado no campo "Click(s):"'''
    verificação_valor_do_click = float(valor_do_click.get())
    if verificação_valor_do_click < 1.0:
        verificação_valor_do_click = 1.0
    elif verificação_valor_do_click > 3.0:
        verificação_valor_do_click = 3.0
    print(verificação_valor_do_click, type(verificação_valor_do_click))
    '''Verificando o valor digitado no campo "Intervalo entre o(s) click(s):"'''
    verificação_valor_do_intervalo = float(valor_do_intervalo.get())
    if verificação_valor_do_intervalo < 1.0:
        verificação_valor_do_intervalo = 1.0
    elif verificação_valor_do_intervalo > 10.0:
        verificação_valor_do_intervalo = 10.0
    print(verificação_valor_do_intervalo, type(verificação_valor_do_intervalo))

def captura(event):
    '''Capturando a tecla digitada no campo "Tecla para ativar/desativar:"'''
    verificação_valor_da_tecla = keyboard.read_key(event.char)
    keyboard.write(verificação_valor_da_tecla.upper())
    print(verificação_valor_da_tecla)

'''Configurações da janela'''
janela = Tk()
janela.title('eAutoClick')
janela.geometry('500x250')
janela['bg'] = 'black'

#                            '''Configurações dos widgets da janela'''
'''Quantidade de Click(s)'''
click = Label(janela, text='Click(s):', font='arial 15 bold', bg='black', fg='white')
click.place(x=183, y=20)
valor_do_click = Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white')
valor_do_click.place(x=270, y=21)
info_click = Label(janela, text='Mín: 1.0 | Máx: 3.0', font='arial 9 italic', bg='black', fg='white')
info_click.place(x=270, y=51)

'''Intervalo entre o(s) Click(s)'''
intervalo = Label(janela, text='Intervalo entre o(s) click(s):', font='arial 15 bold', bg='black', fg='white')
intervalo.place(x=0, y=75)
valor_do_intervalo = Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white')
valor_do_intervalo.place(x=270, y=76)
info_intervalo = Label(janela, text='Mín: 1.0 | Máx: 10.0', font='arial 9 italic', bg='black', fg='white')
info_intervalo.place(x=270, y=106)

'''Tecla para ativar/desativar o Auto-Click'''
tecla = Label(janela, text='Tecla para ativar/desativar:', font='arial 15 bold', bg='black', fg='white')
tecla.place(x=3, y=130)
valor_da_tecla = Entry(janela, font='arial 15 bold', width=5, bg='black', fg='white')
valor_da_tecla.bind("<Key>", captura)
valor_da_tecla.place(x=270, y=131)
info_tecla = Label(janela, text='Info: Aperte qualquer tecla', font='arial 9 italic', bg='black', fg='white')
info_tecla.place(x=270, y=161)
'''Botão para ligar'''
ligar = Button(janela, text='LIGAR', font='arial 15 bold', width=41, bg='black', fg='white', command=conversão)
ligar.place(x=0, y=200)
'''------------------------------------------------------------------------------------------------------------------'''
janela.mainloop()

E também tentei usando a biblioteca PyAutoGui. Não consegui, obti o mesmo resultado.

Até pesquisei por outras bibliotecas que trabalham com interface gráfica no Python mas, PyQt5 dá erro quando tento baixar. Eu acho que é porque eu estou usando Python 3.8. Não sei. Eu li aqui que, o PyQt5 é compatível mas, né... dá erro mesmo assim.

Tem o:
PySide - Versão do Python: 3.7 + (esse, se não me falha a memória, também deu erro ao tentar baixar)
Kivy - Versão do Python: 3.6 +
PyGtk - Versão do Python: 3.1 +
WxPython - Versão do Python: 3.7 +

Estou pensando seriamente em pular fora do barco ou integrar outra linguagem para conseguir executar essa tarefa porque tá *****.

adicionado 6 minutos depois

Tem também as bibliotecas PyGame e PyGlet.

 

A solução que o @brund321 te passou é o que te falei para fazer...ouvir o evento e pegar a key, de acordo com aquele diálogo que te passei em que a pessoa explica que o Tkinter não tem propriedades para tal, portanto ela se limita a escutar eventos e na captura desses eventos você aplica seu código. Que bom que alguém deu uma boa dica para o seu caso!

 

Olha eu trabalho somente com o Kivy quando o assunto é interface gráfica e digo que é disparado o melhor framework para desenvolvimento gráfico usando o Python, além do Kivy ser multiplataforma, com ele é possível fazer aplicativos para PC, MAC, Linux usando sempre o mesmo código, ele gera um bytecode, voce não precisa reescrever nada mesmo se for para mobile(Android, IOS, etc...), o que muda entre as plataformas é a forma de compilar o código bytecode para gerar por exemplo executáveis para o Windows, voce podria usar o py2exe, já para Linux, Android e IOS, usar o Buildozer, e no Buildozer, basta informar antes de compilar para qual das 3 plataformas voce está gerando um apk ou xcode, e assim você vai poder distribuir sua aplicação.

Postado

@fspjonny Desculpa, cara. Mas eu realmente não consegui por prática (isso mesmo, POR PRÁTICA), chegar onde eu queria, com o que você me "solicitou"/ajudou. Com o que o @brund321 falou, eu consegui. No seu, eu fiquei um tanto confuso porque eu não entendo o que esse lamba faz. Meu conhecimento de Python é BEEEEEEEM BÁSICO, porém, todavia, eu quero aprender a linguagem criando coisas mais "complexas", pra poder fixar bem o aprendizado.

De qualquer forma, eu vou pro Kivy. Muito obrigado pelo feedback do mesmo e mais uma vez, muito obrigado pelo feedback das resoluções que você me enviou para me auxiliar na execução de uma determinada tarefa no meu código.

Cheguei agora do trabalho com meu pai e vou tentar mais duas idéias que eu tive para tentar solucionar essa parada do Entry, não dando ou dando, vou pro Kivy.

Postado

Lambda é uma função anônima, existente no Python e em outras linguagens como Java,JS, C++, PHP, etc...

 

Talvez você já tenha ouvido ou visto esse termo em outras dessas linguagens de programação, mas sim o lambda é uma função anônima, ela pode receber qualquer número de argumentos, mas só pode ter apenas uma expressão.

Um exemplo básico de uso seria esse aqui em comparação com uma função comum:

image.png.2d16a4d1a70fa02403b93c8b0f5d6427.png

 

Aí você pergunta: E qual a vantagem? ou porque usar ou não usar? e quando usar essa tal lambda?

O termo em sí vem do Cálculo Lambda, função matemática que vem do paradigma da programação funcional.

São as entidades que podem ser utilizadas como argumentos e retornadas como valores de outras funções.

 

Leia esse artigo: https://realpython.com/python-lambda/

 

 

 

image.png

Postado

Nouça, entendi! kkkkk À primeira vista É BEM estranho esse uso do lambda. Mas me acostumei já.

Mais tarde eu posto como eu "solucionei" esse meu programinha kk.
Posto a resolução mais tarde e depois posto como ele ficou, já funcionando como .exe

Vou fazer outras paradas...

Postado

Pô, fiz umas gambiarras aqui e deu certo. Ó como ficou:
 

from tkinter import *
import keyboard

'''Aqui que está a gambiarra'''
#                                                   FUNÇÕES
def capturar(v):
    #   Capturando a tecla digitada no campo "Tecla para ativar/desativar:"
    verificação_valor_da_tecla = keyboard.read_key(v.char)
    if verificação_valor_da_tecla == verificação_valor_da_tecla:
        label_valor_da_tecla = Label(janela, text='', font='arial 15 bold', width=13, bg='black', fg='white')
        label_valor_da_tecla.place(x=270, y=130)
        label_valor_da_tecla['text'] = verificação_valor_da_tecla.upper()

def conversão():
  #    Verificando o valor digitado no campo "Click(s):"
  verificação_valor_do_click = float(valor_do_click.get())
  if verificação_valor_do_click < 1.0:
	verificação_valor_do_click = 1.0
  elif verificação_valor_do_click > 3.0:
	verificação_valor_do_click = 3.0
  print(verificação_valor_do_click, type(verificação_valor_do_click))

  #   Verificando o valor digitado no campo "Intervalo entre o(s) click(s):"
  verificação_valor_do_intervalo = float(valor_do_intervalo.get())
  if verificação_valor_do_intervalo < 1.0:
	verificação_valor_do_intervalo = 1.0
  elif verificação_valor_do_intervalo > 10.0:
	verificação_valor_do_intervalo = 10.0
  print(verificação_valor_do_intervalo, type(verificação_valor_do_intervalo))

  #   Verificando se as duas situações acima estão corretas
  if (verificação_valor_do_click == True) or (verificação_valor_do_intervalo == True): #na lógica, era pra usar o "and", só que ele não funciona, o botão não muda o texto dele. Aí, estou usando o "or" pra verificar se uma das duas é verdadeira.
	ligar['text'] = 'RECONFIGURAR'
  #   ...
  if ligar['text'] == 'RECONFIGURAR':
	info_eAutoClick = Label(janela, text='Agora é só ativar.\n Para ativar, aperte a tecla escolhida e para desativar, aperte-a novamente.\n\n Para fechar, clique no botão no "X".', font='arial 10 bold', width='60', bg='black', fg='green')
	info_eAutoClick.place(x=0, y=250)

#                                           CONFIGURAÇÕES DA JANELA
janela = Tk()
janela.title('eAutoClick')
janela.geometry('500x320')
janela['bg'] = 'black'

#                                       CONFIGURAÇÕES DOS WIDGETS DA JANELA
#   Quantidade de Click(s)
click = Label(janela, text='Click(s):', font='arial 15 bold', bg='black', fg='white')
click.place(x=183, y=20)
valor_do_click = Entry(janela, font='arial 15 bold', width=13, bg='black', fg='white')
valor_do_click.place(x=270, y=21)
info_click = Label(janela, text='Mín: 1.0 | Máx: 3.0', font='arial 9 italic', bg='black', fg='white')
info_click.place(x=270, y=51)

#   Intervalo entre o(s) Click(s)
intervalo = Label(janela, text='Intervalo entre o(s) click(s):', font='arial 15 bold', bg='black', fg='white')
intervalo.place(x=0, y=75)
valor_do_intervalo = Entry(janela, font='arial 15 bold', width=13, bg='black', fg='white')
valor_do_intervalo.place(x=270, y=76)
info_intervalo = Label(janela, text='Mín: 1.0 | Máx: 10.0', font='arial 9 italic', bg='black', fg='white')
info_intervalo.place(x=270, y=106)

#   Tecla para ativar/desativar o Auto-Click
tecla = Label(janela, text='Tecla para ativar/desativar:', font='arial 15 bold', bg='black', fg='white')
tecla.place(x=3, y=130)
valor_da_tecla = Entry(janela, font='arial 15 bold', width=13, bg='black', fg='white')
valor_da_tecla.bind("<Key>", capturar)
valor_da_tecla.place(x=270, y=131)
info_tecla = Label(janela, text='Info: Aperte qualquer tecla', font='arial 9 italic', bg='black', fg='white')
info_tecla.place(x=270, y=161)

#   Botão para ligar
ligar = Button(janela, text='LIGAR', font='arial 15 bold', width=41, bg='black', fg='white', command=conversão)
ligar.place(x=0, y=200)
'''------------------------------------------------------------------------------------------------------------------'''
janela.mainloop()

E por último, agora estou tendo problema pra fazer com que o programa funcione ao apertar a tecla escolhida, por dois motivos:
1 - Devido a minha gambiarra pra poder fazer aparecer em tempo real a tecla pressionada, na hora que eu vou construir o código para ativar o programa, não dá porque são duas funções diferentes, logo, eu não tenho (ou, não sei) como fazer.

2 - Eu tentei colocar uma função dentro da outra, porém, quando é para mim clicar no botão "LIGAR", ele me dá erro pois, do jeito que eu puxo a função, está errada e eu não sei como fazer (ou não tem como fazer). Pra exemplificar o que eu acabei de escrever: Pegue a segunda função e identa para dentro da primeira.

 

E um outro problema que eu estou tendo também é para fazer com que o programe rode com a tecla escolhida. Eu tentei algumas coisas com o Keyboard e PyAutoGui para guardar a tecla escolhida mas, sem sucesso.


Enfim... @fspjonny e @brund321 só atualizando vocês dois já que eu disse que atualizaria. Eu vou continuar tentando resolver esse problema aí no tkinter, porém, estou partindo pro Kinvy.
E @fspjonny, você acha que eu consigo criar esse mesmo programa no Kivy?

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!