繁体   English   中英

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

[英]How to add visuals to python chat program

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

  1. 我应该在现有程序上覆盖视觉效果还是应该围绕视觉效果制作新程序

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

  3. 我可以对如何编写此代码有某种形式的一般性想法吗(也许是代码示例?)

这是我现有的代码:

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

必须同意,tkinter可能是前往此处的更好方法。 对于聊天程序,pygame的sprites / rects / surfaces几乎没有用。 但是,tkinter具有按钮和标签以及其他内置的类似内容,它们会更好地满足您的需求。 顺便说一句,为了使您的套接字生活更加轻松,请查看makefile方法。 makefile方法可简化使用。 我建议查看Socket.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()对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM