<p>针对缓冲区的问题,需要将<code>bytes()</code>发送到套接字。它不接受字符串。
我认为使用套接字是如此低的水平,不是这里的最佳实践。尝试开发一个restapi,它接受来自客户端的请求并为您执行db操作。<a href="http://cherrypy.org/" rel="nofollow noreferrer">CherryPy</a>非常小,对于这样一个简单的开始是很好的。回到客户端代码,尝试创建一个<code>Button</code>,并将其绑定到一个方法,该方法将用户名发送到服务器。在当前代码中,您正在将<code>kivy.uix.textinput.TextInput</code>对象发送到服务器,而您需要使用对象的<code>text</code>属性发送它的文本。我建议做如下修改</p>
<pre><code>from kivy.app import App
# kivy.require("1.8.0")
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
import socket
class LoginScreen(GridLayout):
def __init__(self, **kwargs):
super(LoginScreen, self).__init__(**kwargs)
self.cols = 3
self.my_socket = socket.socket()
host = socket.gethostname()
port = 8585
self.my_socket.connect((host, port))
self.add_widget(Label(text='username'))
self.username = TextInput(multiline=False)
self.add_widget(self.username)
self.add_widget(Label(text='Password'))
self.password = TextInput(multiline=False, password=True)
self.add_widget(self.password)
self.submit_button = Button(text='Submit')
self.submit_button.bind(on_press=self.submit_username)
self.add_widget(self.submit_button)
def submit_username(self, *args):
# Make sure to validate the input before submitting to the server
self.my_socket.send(bytes(self.username.text))
class SimpleKivy(App):
def build(self):
return LoginScreen()
if __name__ == '__main__':
SimpleKivy().run()
</code></pre>