2016-03-09 37 views
0

我已经写了一个基本的基于python套接字的聊天程序(我的第二个),我想添加一些视觉效果使它更友好一些。如何添加视觉效果到蟒蛇聊天程序

  1. 我应该层中的视觉效果超过了现有的程序,或者我应该做一个新节目围绕视觉

  2. 我应该使用的视觉效果(我知道pygame的是合适的)

  3. 什么Python模块
  4. 我可以有某种形式如何写这个总体思路

这里是我现有的代码(也许代码示例):

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

最好你应该将GUI与程序的内部工作分开。 您可能还想查看['tkinter'](https:// wiki。python.org/moin/TkInter)。我在[GitHub](https://github.com/chuckoy/monopoly-cash-tracker)上制作了一个专卖计算器,但我无法给你任何关于最佳实践的保证,尽管我在那时做了最好的事情。 –

+1

不得不同意tkinter可能是更好的方式去这里。对于一个聊天程序,pygame的sprite/rects/surfaces都没什么用处。不过,tkinter的按钮和标签以及其他类似的东西都可以满足您的需求。顺便说一句,为了让你的套接字更轻松,请查看makefile方法。 –

+0

@DavidJayBrady你可以请发表你的评论作为答案,所以我可以结束这个问题:) –

回答

2

不得不承认,Tkinter的可能是更好的方式去这里。对于一个聊天程序,pygame的sprite/rects/surfaces都没什么用处。不过,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窗口,我推荐使用grid而不是pack。

哦,self.option_window是我的情况下的tkinter.Tk()对象。