Eu não sei exatamente qual é o problema, mas aqui estão algumas coisas:
Ambiente
Meu primeiro palpite seria uma diferença no ambiente quando você usa o terminal cygwin e quando executa o bash através do arquivo em lote.
Ao executar a partir do terminal cygwin, execute o comando env para ver o que é o ambiente (já faz um tempo desde que usei o windows, mas suspeito que o env seja parte do cygwin ou seja integrado ao bash).
Em seguida, adicione o mesmo comando ao início do seu script de shell.
#!/bin/sh
export DISPLAY=:0.0
env
python c:/users/<my directories>/<python-file>.py
Compare os dois ambientes e veja se existem diferenças.
pro-tip : você pode gravar a saída do comando env em um arquivo com env > c:/users/<your directories>/env1.txt (depois usar env2.txt do seu script de shell) e compará-los com o comando ferramenta de linha diff . ou seja, diff env1.txt env2.txt .
Intérprete
A próxima coisa está relacionada, mas o interpretador python está sendo executado em cada caso. Você tem apenas um python instalado em seu sistema? Ou você pode ter vários. Por exemplo, você instalou através do cygwin e do anaconda?
Se você tiver vários, verifique qual versão está sendo executada com which python em cada caso.
GUI Toolkit
Qual kit de ferramentas de gui você está usando? Não estou familiarizado com a API winfo_screenwidth() . Presumivelmente isso é fornecido por alguma biblioteca / pacote que você está usando. Qual pacote é esse?
Não tenho certeza sobre o windows world / cygwin, mas no mundo linux é possível que um programa determine se stdin é ou não um terminal. O kit de ferramentas que você está usando pode ter um comportamento diferente nos dois casos. Se assim for, a documentação do kit de ferramentas seria onde ir para essa informação.
Além disso, o IIRC tem duas maneiras de iniciar um programa no Windows. Há a maneira padrão, por exemplo, int main() e a maneira da GUI (não lembro o nome da função principal neste caso). Lembro-me de que, para algumas linguagens interpretadas, existem binários de intérprete diferentes, dependendo de qual ponto de entrada você queria. O gui pode começar ou terminar com w . Por exemplo, acho que javaw.exe é a versão gui e java.exe é a versão do console (para java). Existe um equivalente para python no Windows?