2016-01-19 8 views
-2

Я хотел бы узнать, можно ли создать приложение Kivy, которое может связываться с моим компьютером. Я хочу, чтобы иметь возможность щелкнуть кнопку в моем приложении Kivy (это установлено на моем смартфоне) и запустить выполнение другого скрипта python. Например, я бы нажал кнопку на своем смартфоне, а код Python на моем ПК для Windows напечатал «hello world».Как я могу познакомиться с моим компьютером через Kivy?

Спасибо, ребята. Я действительно ценю твою помощь. Любая идея приветствуется.

+0

вам нужно будет создать сервер на ПК, который может получать информацию со смартфона. Это может быть HTTP/WWW-сервер или другой. Вы можете использовать флеш-фреймворк для его создания. – furas

ответ

1

Во-первых, вам нужен сервер, например Flask. Установить колбу с pip install flask.

Затем напишите простой сервер. Код будет писать сообщения, отправленные клиентом, в файл messages.log. Конечно, вы могли бы сделать что-то еще, например, выключить компьютер.

server.py файл:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

from flask import Flask 
from flask import request 
import time 
app = Flask(__name__) 


@app.route('/', methods=['POST']) 
def hello_world(): 
    try: 
     message = request.form['message'] 
     return do_something(message) 
    except Exception, e: 
     print e 
     return 'error' 


def do_something(message): 
    with open('messages.log', 'a') as f: 
     current_time = time.ctime() 
     f.write(current_time + ': ' + message + '\n') 
    return 'message saved' 

if __name__ == '__main__': 
    app.run(debug=True, host='0.0.0.0') 

Запустите файл. Адрес сервера: http://localhost:5000.

Как только у вас есть рабочий сервер, напишите клиентское приложение. Код отправит текстовое сообщение на сервер.

test.kv файл:

#:kivy 1.9.0 

MainLayout: 
    cols: 1 
    spacing: '30dp' 
    padding: '50dp', '50dp', '50dp', '50dp' 

    Label: 
     id: status_label 
     size_hint_y: 0.3 

    TextInput: 
     id: message_input 

    Button: 
     text: 'send message to server' 
     on_press: root.send_message(message_input.text) 

    Button: 
     text: 'quit app' 
     on_press: app.stop() 

client.py файл:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
from kivy.app import App 
from kivy.network.urlrequest import UrlRequest 
from kivy.uix.gridlayout import GridLayout 
import urllib 


class MainLayout(GridLayout): 

    count = 1 

    def send_message(self, message): 
     POST_data = self._prepare_data(message) 
     self._send_message(POST_data) 

    def _prepare_data(self, message): 
     auth_data = {'message': message} 
     auth_data = urllib.urlencode(auth_data) 
     headers = { 
      'Content-type': 'application/x-www-form-urlencoded', 
      'Accept': 'application/json' 
     } 
     return {'auth_data': auth_data, 'headers': headers} 

    def _send_message(self, POST_data): 
     UrlRequest(
      url='http://localhost:5000/', 
      req_body=POST_data['auth_data'], 
      req_headers=POST_data['headers'], 
      on_failure=self._on_connection_failure, 
      on_error=self._on_connection_error, 
      on_success=self._on_connection_success, 
     ) 

    def _on_connection_success(self, request, result): 
     self.ids.status_label.text =\ 
      'message %s delivered' % self.count 
     self.count += 1 

    def _on_connection_failure(self, request, result): 
     self.ids.status_label.text = 'connection fail' 

    def _on_connection_error(self, request, result): 
     self.ids.status_label.text = 'connection error' 


class Test(App): 
    pass 


Test().run() 

Для подключения к серверу с помощью смартфона, то в качестве URL в URLRequest введите IP-адрес компьютера вместо ' localhost ', например: http://192.168.0.1:5000/.

+0

Спасибо человеку! .... –

+0

@AlejandroDapenaSanz Пожалуйста, отметьте мое сообщение как ответ на вопрос. – jligeza

+0

Спасибо человеку, но в каком порядке мне нужно запускать коды, также, код kivy говорит о неправильном синтаксисе ...:/ –