2016-03-09 35 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()對象。