Python e Harbour, indo para GUI LINUX

Fórum sobre outras linguagens de programação.

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Python e Harbour, indo para GUI LINUX

Mensagem por Itamar M. Lins Jr. »

Ola!
Probably many options. I'm a Linux user (currently Fedora 31, Harbour 3.2, gcc, Python 3). I've had success splitting up terminal applications into two parts:
1. Using glade and Python3 to develop a GUI front end, which calls....
2. A Harbour database "server" which does all the database heavy lifting

Item #2 can be based on the original Harbour terminal application code. Item #1 will be new. Good luck with the transition!
Como ?

Código: Selecionar todos

* SAMPLE.PRG  Template Harbour 3.2 program callable from anywhere
*    sample compile: hbmk2 -static hbnf.hbc xhb.hbc sample.prg
*
* Sample call from Python3: >>> import subprocess
*                           >>> mret = subprocess.check_output(["./sample", "open"])
*    
* code as shown assumes one text parameter
* the do case statement can act on any number of predefined parameters
*          and multiple parameters per call if you so choose

PROCEDURE  MAIN(...)

PUBLIC mparms                                  && passed parameters
 
mparms      := HB_AParams()                    && array of parms
mparm_count := len( mparms )

msel = mparms[1]                               && get first parameter

do case
    case msel = "open"
        * code for open here
    case msel = "foobar"
        * code for foobar here
    otherwise
        * ...
endcase

RETURN

** End **
Não vi o código Python. Deve ser a parte das telas. Será DBF ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Python e Harbour, indo para GUI LINUX

Mensagem por JoséQuintas »

Só pra lembrar... que todos esquecem...
O Harbour como ser usado totalmente como DLL.

Será que compensa mexer no Harbour pra trabalhar com essas coisas.....
Ou não seria melhor colocar como DLL e usar...

De vez em quando penso nisso.
Porque trazer recursos que já existem no VB para o Harbour, se podemos levar o Harbour para o VB?

E deve valer pra página de internet também.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Python e Harbour, indo para GUI LINUX

Mensagem por bencz »

Nada de mais nesse projeto .... apenas um programa chamando outro....
Imagem
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Python e Harbour, indo para GUI LINUX

Mensagem por Itamar M. Lins Jr. »

Ola!
Para quem quer aprender Python ou já sabe algo, e quer integrar com Harbour.
É uma noticia, apenas para informar que tem gente usando ou pelo menos tentando.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Python e Harbour, indo para GUI LINUX

Mensagem por Vlademiro »

Uma outra forma, além das que foram postas, é criar um webservice usando Harbour. Os retornos podem ser em JSON. A lib httpd permite criar o servidor com poucas linhas e as funções hb_jsonencode/decode tratam das entradas e saídas.
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

Python e Harbour, indo para GUI LINUX

Mensagem por bencz »

Vlademiro

Ai sim, vejo coisas boas!
Imagem
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Python e Harbour, indo para GUI LINUX

Mensagem por alxsts »

Olá!
Vlademiro escreveu:Uma outra forma, além das que foram postas, é criar um webservice usando Harbour
Poderia postar um exemplo funcional?
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Python e Harbour, indo para GUI LINUX

Mensagem por Vlademiro »

Claro, no momento não estou no computador, mais tarde eu coloco algumas dicas para quem quer começar "do zero"
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Python e Harbour, indo para GUI LINUX

Mensagem por Vlademiro »

Anexei um exemplo que já tinha aqui.
httpd.prg
(1.19 KiB) Baixado 478 vezes
Ele deve ser compilado com hbhttpd.hbc
Ainda não é o webservice, mas já é um começo. Note que cada pasta virtual corresponde ao retorno de uma função. (Veja o hash na linha 29)
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Python e Harbour, indo para GUI LINUX

Mensagem por Vlademiro »

Agora, a partir do exemplo anterior, substitua a função Start por :

Código: Selecionar todos


FUNCTION Start()

	LOCAL hStruct := { => }
	
	hStruct[ "CODCLI" ] := "0001"
	hStruct[ "NOME" ] := "HELLO WORLD"
	
	UAddHeader( "Content-Type", "application/json" ) // Json type return

    RETURN HB_JsonEncode( hStruct )

Temos um retorno no formato JSON, que pode ser lido por qualquer aplicativo que consiga "enchergar" o servidor na rede.

A função UAddHeader() informa ao navegador que o retorno é em formato JSON
A função HB_JsonEncode converte um hash em uma string json

Agora vamos criar um cliente simples em PHP...
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Python e Harbour, indo para GUI LINUX

Mensagem por Vlademiro »

Esse pequeno script, feito em PHP, lê o JSON do Harbour e o transforma em hash php (faz o inverso)

Código: Selecionar todos

<?php
// Cria o cURL
$curl = curl_init();
// Seta algumas opções
curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://localhost:8002'
]);
// Envia a requisição e salva a resposta
$response = curl_exec($curl);
// Fecha a requisição e limpa a memória
$response = json_decode( $response );
var_dump( $response );

curl_close($curl);

Para que funcione precisa da extensão curl funcionando no seu PHP.
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Python e Harbour, indo para GUI LINUX

Mensagem por Vlademiro »

No contrib do harbour tem um exemplo desse httpd com outras funções, inclusive com rotinas de autenticação (sessão) que você pode usar para proteger seu webservice de acessos indesejados.

Se você está familiarizado com JS/JQuery, existem diversas libs que geram resultados muito bons a partir da leitura de um json. Por exemplo:

http://www.alpacajs.org/

Agora com Python eu já não conheço, mas nada que uma pesquisa no google não resolva, já que o JSON se transformou em um padrão.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Python e Harbour, indo para GUI LINUX

Mensagem por alxsts »

Olá!

Obrigado Vlademiro!
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
mauricioportela
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 29 Jul 2016 04:22
Localização: Vitoria da Conquista/Bahia

Python e Harbour, indo para GUI LINUX

Mensagem por mauricioportela »

Não vi o código Python. Deve ser a parte das telas. Será DBF ?
a chamada do codigo python:

Código: Selecionar todos


# importa do modulo de processos/subprocessos
import subprocess
# recebe na variavel 'mret' - um bloco
mret = subprocess.check_output(["./sample", "open"])

Eu executei aqui no meu computador (windows 10) mas, ele congela o interpretador python.

eu troquei:

Código: Selecionar todos

./sample
por

Código: Selecionar todos

sample.exe
Responder