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

2024-03-28 12:29:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

Tags: clienttruehostforinputdataportdef
1条回答
网友
1楼 · 发布于 2024-03-28 12:29:40

我不得不同意,特金特可能是更好的方式来这里。对于聊天程序,pygame的sprites/rects/surfaces都没有什么用处。不过,tkinter有按钮、标签和其他类似的东西,可以更好地满足您的需求。顺便说一句,为了让使用socket的生活更轻松,请查看makefile方法。makefile方法允许更容易地使用。我建议看一下Socket.error [Error 10060]来了解如何使用它及其用法。没必要,只是让生活更轻松:)

编辑: “我应该在现有的程序上分层视觉效果,还是应该围绕视觉效果制作一个新程序”

不太清楚你这里所说的“现有程序”是什么意思。当涉及到你应该编写什么代码时,把你的逻辑和用户界面分开。所以有一个模块处理消息的发送和接收,还有一个模块处理显示。你知道吗

“我应该使用什么python模块来制作视觉效果(我知道pygame是合适的)”

可能是特金特。我只在tkinter和pygame方面有经验,但在这两个方面,你可能需要tkinter。我在第一段解释了原因。你知道吗

“我能对如何写这个有一些大概的想法吗(可能是代码示例?)你知道吗

假设您使用tkinter,查看stringvars,它们可能对您有用,也可能不有用。至于你的课程结构,我不太清楚你想要什么,所以我不能帮你。但要从简单开始。例如,获取要在程序之间发送的消息,并将其打印出来。然后让信息显示在窗口上。。让用户通过GUI输入消息(查看tkinter entry小部件!)。祝你好运!你知道吗

编辑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)

按钮的位置是根据我做按钮的位置来确定的_框架.grid(....). 要组织tkinter窗口,我建议使用grid而不是pack。你知道吗

哦,还有self.option\u窗口是一个tkinter公司()对象。你知道吗

相关问题 更多 >