1. 程式人生 > >用python一個融合gui的聊天小程式

用python一個融合gui的聊天小程式

服務端:
server:

-- coding:utf-8 --

from Tkinter import *
import socket;
import threading
import time
”’
這是一個聊天小程式
”’

topWv = Tk();
topWv.title(“connect”)
topWv.geometry(‘500x800’)
server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.bind((‘localhost’, 20000))
server.listen(5)

tcpSock=None;
addr=None;

message_var = StringVar();#這個變數存放文字框中的值
message_e=Entry(topWv,textvariable=message_var);
message_var.set(“hello”)
message_e.place(x=10,y=740,anchor=NW)

def send():
”’點擊發送按鈕”’
global server;
global message_var
message_str = ”.join(message_var.get());
print message_str
global tcpSock;
global addr;
tcpSock.send(message_str);
pass
sendBtn= Button(topWv,text=”傳送”,bg=”green”,width=10,height=1,command=send);
sendBtn.place(x=250,y=730,anchor=NW);
t=Text(topWv,width=50,height=35);
t.place(x=10,y=100,anchor=NW)
def server_thread():
global server;
global tcpSock;
global addr;
global t;
tcpSock, addr = server.accept();
while 1:
print “wait data”
data=tcpSock.recv(1024)
print addr
if not data:
continue;
else:
print data;
t=threading.Thread(target=server_thread,args=());
t.start();
topWv.mainloop();
客戶端
client:

from Tkinter import *
from socket import *
import threading
import time
”’
這是一個聊天小程式
”’

topWv = Tk();
topWv.title(“connect”)
topWv.geometry(‘500x800’)

message_var = StringVar();#這個變數存放文字框中的值
message_e=Entry(topWv,textvariable=message_var);
message_var.set(“hello”)
message_e.place(x=10,y=740,anchor=NW)
print ‘開始連結伺服器’
client = socket(AF_INET, SOCK_STREAM);
client.connect((‘localhost’, 20000));
print ‘連結成功’

def okBtn():
”’點選確定按鈕,是點選按鈕確定連結伺服器”’
print var.get()
return;
def cancleBtn():
”’點選取消按鈕,點選取消按鈕,介面消失”’
print “click cancleBtn”;
return;
def send():
”’點擊發送按鈕”’
global client;
global message_var;
message_str =”.join(message_var.get());
print message_str
client.send(message_str)
pass

okBtn=Button(topWv,text=”連結”,bg=”green”,command=okBtn);
cancleBtn=Button(topWv,text=”取消”,bg=”red”,command=cancleBtn)
sendBtn= Button(topWv,text=”傳送”,bg=”green”,width=10,height=1,command=send);
okBtn.place(x=400,y=10,anchor=NW);
cancleBtn.place(x=400,y=60,anchor=NW);
sendBtn.place(x=250,y=730,anchor=NW);

linkLable=Label(topWv,text=”請輸入伺服器ip地址”,bg=”white”,font=”Arial”,width=20,height=1);
linkLable.place(x=10,y=20,anchor=NW);
var = StringVar();#這個變數存放文字框中的值
e=Entry(topWv,textvariable=var);
var.set(“127.0.0.1”);
e.place(x=10,y=50,anchor=NW);

t=Text(topWv,width=50,height=35);
t.place(x=10,y=100,anchor=NW)
def client_thread():
global t;
while 1:
global client;
data= client.recv(1024)
if not data:
break
else:
t.insert(data)
t.insert(INSERT,data)
print data
t=threading.Thread(target=client_thread,args=());
t.start();
topWv.mainloop();
因為是初學,所以有點寫的不太好,見笑了