如何为python聊天程序添加视觉效果

时间:2016-03-09 09:19:35

标签: python module pygame

我已经编写了一个基于python套接字的聊天程序(我的第二个),我想添加一些视觉效果,使其更加用户友好。

  1. 我应该将视觉效果分层到现有节目上,还是应该围绕视觉效果制作新节目

  2. 我应该使用什么python模块进行视觉效果(我知道pygame是合适的)

  3. 我是否可以对如何写这个有一些总体思路(代码示例可能?)

  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()
    

1 个答案:

答案 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()对象。