2016-01-19 49 views
-2

我想知道是否可以创建一个可以与我的计算机通信的Kivy应用程序。我希望能够点击我的Kivy应用程序中的按钮(安装在我的智能手机中)并触发另一个python脚本的执行。例如,我会点击智能手机上的一个按钮,Windows PC中的Python代码打印出“hello world”。我如何通过Kivy与我的电脑交流?

谢谢你们。我非常感谢你的帮助。任何想法是受欢迎的。

+0

您将不得不在PC上创建可从智能手机接收信息的服务器。它可以是HTTP/WWW服务器或其他。你可以使用Flask框架来创建它。 – 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

Thanks man!.... –

+0

@AjjandroDapenaSanz请将我的帖子标记为对问题的回答。 – jligeza

+0

谢谢你,但是,我必须运行代码的顺序,还有,它表示语法错误的kivy代码...:/ –

相关问题