我已经编写了一个基于python套接字的聊天程序(我的第二个),我想添加一些视觉效果,使其更加用户友好。
我应该将视觉效果分层到现有节目上,还是应该围绕视觉效果制作新节目
我应该使用什么python模块进行视觉效果(我知道pygame是合适的)
我是否可以对如何写这个有一些总体思路(代码示例可能?)
这是我现有的代码:
Client:
import socket, threading
#Setup The Variables
WindowTitle = 'Chat 2.0 - Client'
s = socket.socket()
host = raw_input("Please Enter External IP adress Here: ")
print
host = socket.gethostname()
port = 8008
#Attempted To Connect
print "Conecting..."
print
while True:
try:
s.connect((host, port))
break
except:
pass
print "Connected To " + str(host) + " " + str(port)
print
#Check For Incomming Data
def check_for_data():
while True:
data = s.recv(1024)
if data:
print
print "Other: " + str(data)
print
print "You: "
else:
print "Client closed connection"
s.close()
break
#Send Data
def send_data():
while True:
user_input = raw_input("You: ")
print
s.sendall(user_input)
#Start Threads \ Main Loop
t = threading.Thread(target=send_data)
t.daemon = True
t.start() #1
check_for_data()
s.close
Server:
import socket, threading
#Setup The Variables
WindowTitle = 'Chat 2.0 - Client'
host = socket.gethostname()
port = 8008
s = socket.socket()
s.bind((host, port))
print "Awaiting Connection..."
print
s.listen(5)
c, addr = s.accept()
print "Connection From: " + str(addr)
print
def check_for_data(c):
while True:
data = c.recv(1024)
if data:
print
print "Other: " + str(data)
print
print "You: "
else:
print "Client closed connection"
c.close()
break
def send_data():
while True:
message = raw_input("You: ")
print
c.sendall(message)
#Start Threads \ Main Loop
t = threading.Thread(target=send_data)
t.daemon = True
t.start() #1
check_for_data(c)
c.close()
答案 0 :(得分:2)
必须同意tkinter可能是更好的方式。对于聊天程序,pygame的sprite / rects /表面几乎没什么用处。然而,tkinter有内置按钮和标签以及其他类似的东西,可以更好地满足您的需求。顺便说一句,为了让你的插座生活更轻松,请查看makefile方法。 makefile方法允许更容易使用。我建议查看Socket.error [Error 10060]以获取有关如何使用它及其用途的说明。没有必要,只是让生活更轻松:)
编辑: "我应该将视觉效果分层到现有节目上,还是应该围绕视觉效果制作新节目"
现在的程序并不完全确定你的意思。"当谈到您应该编写的代码时,请分解您的逻辑和用户界面内容。所以有一个处理消息发送和接收的模块,另一个处理显示的模块。
"我应该使用什么python模块进行视觉效果(我知道pygame是合适的)"
可能是tkinter。我只有tkinter和pygame的经验,但在这两者中,你可能想要tkinter。我在第一段解释了原因。
"我是否可以对如何写这个有一些总体思路(代码示例可能?)"
假设您使用tkinter,请查看stringvars,它们可能对您有用,也可能对您没用。至于你的程序结构,我不确定你想要什么,所以我无法帮助你。但是从简单开始吧。例如,获取要在程序之间发送的消息,然后将其打印出来。然后将消息显示在窗口上。让用户通过GUI键入消息(查看tkinter条目小部件!)。祝你好运!
编辑2:回答有关如何定位按钮的问题。这是我上一个项目中的一些代码,我必须使用按钮来执行某些操作。
button_frame = tkinter.Frame(master = self.option_window)
button_frame.grid(row = 5, column = 1)
ok_button = tkinter.Button(master = button_frame, text = 'OK',
font = DEFAULT_FONT, command = self.on_ok_clicked)
按钮的位置取决于我执行button_frame.grid(....)的位置。为了整理你的tkinter窗口,我建议使用网格而不是打包。
哦,在我的情况下,self.option_window是一个tkinter.Tk()对象。