简单的python聊天界面
2019-07-01 18:32
1991 查看
简单的python聊天界面
一、用eclipse编写python代码
server代码
import socket host = 'host' port = 12344 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((host, port)) s.listen(1) sock, addr = s.accept() print('Connection built') info = sock.recv(1024).decode() while info != 'exit': print('client:' + info) send_mes = input() sock.send(send_mes.encode()) if send_mes == 'exit': break info = sock.recv(1024).decode() sock.close() s.close()
client代码
import socket s = socket.socket() host = 'host' port = 12345 s.connect((host, port)) print('Linked') info = '' while info != 'exit': print('server:' + info) send_mes = input() s.send(send_mes.encode()) if send_mes == 'exit': break info = s.recv(1024).decode() s.close()
先运行server代码,再运行client代码,就可以进行无界面聊天,但是只能一问一答,不能连续发送多条消息
二、客户端界面
先用wxFormBuilder创建好一个界面,创建好界面后点击F8生成python,直接将这个python代码复制粘贴进上面的工程中,如果不清楚这一步的,可以参考这个博客
https://www.geek-share.com/detail/2755178914.html
完成这一步后,新建一个py文件,我命名为clientframe,如下图
在client.py中添加如下代码
import wx import noname class CliFrame(noname.MyFrame1): def __init__(self, parent): noname.MyFrame1.__init__(self, parent) def main(): app = wx.App(False) frame = CliFrame(None) frame.Show(True) app.MainLoop() if __name__ == "__main__": main() pass
直接运行这个py文件,你导入的窗体界面就会弹出来啦
下面我们来完成对这个窗体中的事件,我先将我的窗体python代码贴出来
import wx import wx.xrc ########################################################################### # Class MyFrame1 ########################################################################### class MyFrame1 (wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size( 500, 300), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) bSizer21 = wx.BoxSizer(wx.VERTICAL) bSizer29 = wx.BoxSizer(wx.HORIZONTAL) self.m_staticText11 = wx.StaticText( self, wx.ID_ANY, u"服务器ip", wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText11.Wrap(-1) bSizer29.Add(self.m_staticText11, 0, wx.ALL, 5) self.m_textCtrl14 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) bSizer29.Add(self.m_textCtrl14, 1, wx.ALL, 5) self.m_staticText12 = wx.StaticText( self, wx.I 1cca8 D_ANY, u"端口号", wx.DefaultPosition, wx.DefaultSize, 0) self.m_staticText12.Wrap(-1) bSizer29.Add(self.m_staticText12, 0, wx.ALL, 5) self.m_textCtrl13 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) bSizer29.Add(self.m_textCtrl13, 1, wx.ALL | wx.EXPAND, 5) self.bt1 = wx.Button(self, wx.ID_ANY, u"确定", wx.DefaultPosition, wx.DefaultSize, 0) bSizer29.Add(self.bt1, 0, wx.ALL, 5) bSizer21.Add(bSizer29, 1, wx.EXPAND, 5) self.m_textCtrl7 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, style=wx.TE_MULTILINE) bSizer21.Add(self.m_textCtrl7, 5, wx.ALL | wx.EXPAND, 5) bSizer5 = wx.BoxSizer(wx.HORIZONTAL) self.m_textCtrl8 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) bSizer5.Add(self.m_textCtrl8, 1, wx.ALL | wx.EXPAND, 5) self.bt2 = wx.Button(self, wx.ID_ANY, u"发送", wx.DefaultPosition, wx.DefaultSize, 0) bSizer5.Add(self.bt2, 0, wx.ALL | wx.ALIGN_RIGHT, 5) bSizer21.Add(bSizer5, 1, wx.EXPAND, 5) self.SetSizer(bSizer21) self.Layout() self.Centre(wx.BOTH) # Connect Events self.bt1.Bind(wx.EVT_BUTTON, self.bt_sure) self.bt2.Bind(wx.EVT_BUTTON, self.bt_send) def __del__(self): pass # Virtual event handlers, overide them in your derived class def bt_sure(self, event): event.Skip() def bt_send(self, event): event.Skip()
打开clientFrame.py
import wx import noname from socket import * s = socket(AF_INET, SOCK_STREAM) class CliFrame(noname.MyFrame1): def __init__(self, parent): noname.MyFrame1.__init__(self, parent) def bt_send(self, event): buffsize = 1024#缓存的数据 senddata = self.m_textCtrl8.GetValue()#获取发送的内容 s.send(senddata.encode())#发送内容 self.m_textCtrl8.SetValue("")#清楚内容 self.m_textCtrl7.AppendText(senddata + '\n')#在对话框显示发送的内容 recvdata = s.recv(buffsize).decode('utf-8')#转换接收的内容榕 self.m_textCtrl7.AppendText(recvdata + '\n')#在对话框显示接收的内容 def bt_sure(self, event): address = self.m_textCtrl14.GetValue() # 服务器的ip地址 port = int(self.m_textCtrl13.GetValue()) # 服务器的端口号 s.connect((address, port))#连接 def main(): app = wx.App(False) frame = CliFrame(None) frame.Show(True) app.MainLoop() if __name__ == "__main__": main() pass
同样先运行server端,在运行clientFrame,客户端就可以在界面中聊天啦(注意,只能一问一答)
wxpython默认输入框不能换行,在窗体生成的py文件中,在你需要换行的那个窗口下,将
wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0)修改为
wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, style=wx.TE_MULTILINE)
相关文章推荐
- Android开发学习之路--UI之简单聊天界面
- Android开发学习之路--UI之简单聊天界面
- 简单python爬虫淘宝图片+界面编程+打包成exe
- Python Tkinter 简单登录界面
- python运用jieba和wordcloud库简单实现对QQ聊天记录制作词云
- 用python写1个简单的聊天服务器5-DB层处理
- python实现简单聊天程序
- iOS 类似微信,QQ聊天界面的气泡聊天简单实现Demo
- python :udp创建简单聊天器
- python实现的简单窗口倒计时界面实例
- 微信聊天底部界面和简单功能
- python实现简单聊天应用(群聊和点对点均实现)
- 用python写1个简单的聊天服务器-项目启动原因
- share中简单聊天界面的实现<代码>
- python实现的简单窗口倒计时界面实例
- 简单实现带界面的一对一聊天
- 用python写1个简单的聊天服务器7-业务处理
- 简单实现python聊天程序
- 简单聊天界面
- 用python写1个简单的聊天服务器2-项目需求与服务器框架