eu quero executar um script python em dietPI. Escolhi dietPI porque quero inicializar rápido.
Quando executo um programa tkinter simples, recebo o erro. _tkinter.TclError: no display name and no $DISPLAY environment variable
Já tentei definir uma variável de exibição como esta: export DISPLAY=:0
(também tentei outros números)
mas então eu entendo _tkinter.TclError: couldn't connect to display ":0.0"
Qualquer ajuda?
Isso me levou o dia todo para começar a trabalhar. (Eu também postei a mesma resposta em um site de SE diferente aqui: https://raspberrypi.stackexchange.com/a/118928/60683 )
Nota: Isto é para raspbian, com a conta de usuário principal usando o nome de usuário padrão ("pi")
Aqui estão as etapas em ordem:
Nomeie seu arquivo Python main.py
e arraste-o para a área de trabalho.
Em seguida, crie um novo arquivo de texto simples e adicione o seguinte conteúdo:
#!/bin/bash
python3 /home/pi/Desktop/main.py
Salve este arquivo de texto como launch.command
na área de trabalho. Este é um script de shell para iniciar seu arquivo python. Por padrão, não vai funcionar, temos que fazer um chmod (próxima etapa)
Execute o terminal e execute o seguinte comando:
chmod u+x /home/pi/Desktop/launch.command
Agora, clique duas vezes em launch.command (e selecione execute
) para iniciar seu arquivo python.
Neste ponto, estamos prontos para lançá-lo na inicialização. Se você fez qualquer outra tentativa de inicialização antes disso, desfaça todas as alterações feitas no arquivo .
Abra o terminal e execute o seguinte:
sudo nano /etc/systemd/system/myproject.service
Vamos apenas chamá-lo de meu projeto por enquanto, não mude nada até depois de colocá-lo em funcionamento, então sinta-se à vontade para tentar renomear
Na janela que aparece, copie e cole exatamente o seguinte:
[Unit]
Description=Start Myproject
After=graphical.target
Wants=graphical.target
[Service]
User=pi
Group=pi
ExecStart=/bin/bash -c "export DISPLAY=:0; export XAUTHORITY=/home/pi/.Xauthority; /home/pi/Desktop/launch.command"
[Install]
WantedBy=graphical.target
Agora pressione ctrl + x para sair e salvar, ele irá solicitar que você salve as alterações, digite "y", o nome do arquivo já deve estar inserido como ... / meuprojeto.serviço, se estiver, pressione Enter e ele salvará e saia, se o nome do arquivo estiver em branco está bagunçado (isso só acontece às vezes), feche o terminal e tente tudo de novo, desculpe.
Agora no terminal, digite:
sudo systemctl daemon-reload
Então
sudo systemctl enable myproject.service
Por último
sudo reboot
No lançamento, antes que qualquer coisa apareça (depois que a tela inicial de inicialização for exibida, é claro, mas antes que a área de trabalho seja exibida), sua GUI será iniciada agora, parabéns!
Eu recomendo que você inicie em tela cheia, para fazer isso, edite seu arquivo python para usar isto:
root.attributes('-fullscreen', True)
NOTA, 'root' provavelmente não é o que você chamou de seu TK () init .... no final do seu código você tem algo como XXXX.mainloop()
, mude 'root' para o que quer que seja XXXX, coloque isto logo após seu init deTK()
Depois de reiniciar, você provavelmente está preso no aplicativo (especialmente se o abriu em tela cheia), coisas como alt + f4 ou alt + f11 não irão matar seu programa. Para sair, pressione o botão windows / menu em seu teclado, o painel de acesso irá aparecer e você pode ir para acessórios> terminal para abrir uma nova janela de terminal, então execute o seguinte:
sudo systemctl stop myproject.service
O programa será encerrado e você voltará à sua área de trabalho padrão ...
AGORA, para evitar que seja iniciado novamente na inicialização, simplesmente renomeie o launch.command
arquivo para DISABLED_launch.command
e, quando estiver pronto para iniciar a inicialização novamente, defina o nome de volta.
Vá buscar uma bebida, você merece.
Além disso, você pode obviamente colocar esses locais diferentes da área de trabalho, mas CERTIFIQUE-SE de usar sempre o caminho completo em qualquer um desses comandos, não use o atalho '~ / ..'.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras