fork download
  1. import sys
  2. import socket
  3. import select
  4. from tkinter import *
  5.  
  6.  
  7. def chat_client():
  8. # initialize GUI
  9. window = Tk()
  10. window.geometry("600x800")
  11. window.title("Communicator")
  12.  
  13. w = Canvas(window, width=580, height=450, bg="ivory2")
  14. w.place(x=5, y=300)
  15.  
  16. # whole conversation is stored here
  17. conversation = Text(window, width=80, height=30, wrap=WORD)
  18. conversation.place(x=10, y=310)
  19. label_enter = Label(window, text="Enter message: ")
  20. label_enter.place(x=5, y=20)
  21.  
  22. # the message from here is being taken to send / write on std out
  23. message_entry = Entry(window, width=30)
  24. message_entry.place(x=120, y=20)
  25.  
  26. msg = ""
  27.  
  28. def say():
  29. x = message_entry.get()
  30. sys.stdout.write(x)
  31. conversation.insert(0.0, x + '\n')
  32. msg = message_entry.get().encode()
  33. message_entry.delete(0, 'end')
  34.  
  35.  
  36. btn_send = Button(window, text="Send!", command=say).place(x=120, y=50)
  37.  
  38. #THIS SEEMS TO BE THE PROBLEM!!!
  39. window.mainloop()
  40. ######################
  41.  
  42. host = 'localhost'
  43. port = 8888
  44.  
  45. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  46. s.settimeout(2)
  47.  
  48. # connect to remote host
  49. try:
  50. s.connect((host, port))
  51.  
  52. except:
  53. print('Unable to connect')
  54. sys.exit()
  55.  
  56. print('Connected to remote host. You can start sending messages')
  57. #sys.stdout.write('[Me] ')
  58. sys.stdout.flush()
  59.  
  60. while 1:
  61.  
  62. socket_list = [sys.stdin, s]
  63.  
  64. # Get the list sockets which are readable
  65. ready_to_read, ready_to_write, in_error = select.select(socket_list, [], [], 1)
  66.  
  67. for sock in ready_to_read:
  68. if sock == s:
  69. # incoming message from remote server, s
  70. data = sock.recv(4096)
  71. if not data:
  72. print('\nDisconnected from chat server')
  73. sys.exit()
  74. else:
  75. # print data
  76. sys.stdout.write(str(data))
  77. #conversation.insert(0.0, str(data) + '\n')
  78. sys.stdout.write('\n-> ');
  79. sys.stdout.flush()
  80.  
  81. else:
  82. # user entered a message
  83. #msg = message_entry.get().encode() #sys.stdin.readline().encode()
  84. s.send(msg.encode())
  85. msg2 = sys.stdin.readline().encode()
  86. s.send(msg2)
  87. sys.stdout.write('\n-> ');
  88. sys.stdout.flush()
  89. message_entry.delete(0, 'end')
  90.  
  91.  
  92. if __name__ == "__main__":
  93. sys.exit(chat_client())
Runtime error #stdin #stdout #stderr 0.02s 76224KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Traceback (most recent call last):
  File "./prog.py", line 93, in <module>
  File "./prog.py", line 9, in chat_client
  File "/usr/lib/python3.5/tkinter/__init__.py", line 1880, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable