import sys
import socket
import select
from tkinter import *
def chat_client( ) :
# initialize GUI
window = Tk( )
window.geometry ( "600x800" )
window.title ( "Communicator" )
w = Canvas( window, width= 580 , height= 450 , bg= "ivory2" )
w.place ( x= 5 , y= 300 )
# whole conversation is stored here
conversation = Text( window, width= 80 , height= 30 , wrap= WORD)
conversation.place ( x= 10 , y= 310 )
label_enter = Label( window, text= "Enter message: " )
label_enter.place ( x= 5 , y= 20 )
# the message from here is being taken to send / write on std out
message_entry = Entry( window, width= 30 )
message_entry.place ( x= 120 , y= 20 )
msg = ""
def say( ) :
x = message_entry.get ( )
sys .stdout .write ( x)
conversation.insert ( 0.0 , x + '\n ' )
msg = message_entry.get ( ) .encode ( )
message_entry.delete ( 0 , 'end' )
btn_send = Button( window, text= "Send!" , command= say) .place ( x= 120 , y= 50 )
#THIS SEEMS TO BE THE PROBLEM!!!
window.mainloop ( )
######################
host = 'localhost'
port = 8888
s = socket .socket ( socket .AF_INET , socket .SOCK_STREAM )
s.settimeout ( 2 )
# connect to remote host
try :
s.connect ( ( host, port) )
except :
print ( 'Unable to connect' )
sys .exit ( )
print ( 'Connected to remote host. You can start sending messages' )
#sys.stdout.write('[Me] ')
sys .stdout .flush ( )
while 1 :
socket_list = [ sys .stdin , s]
# Get the list sockets which are readable
ready_to_read, ready_to_write, in_error = select .select ( socket_list, [ ] , [ ] , 1 )
for sock in ready_to_read:
if sock == s:
# incoming message from remote server, s
data = sock.recv ( 4096 )
if not data:
print ( '\n Disconnected from chat server' )
sys .exit ( )
else :
# print data
sys .stdout .write ( str ( data) )
#conversation.insert(0.0, str(data) + '\n')
sys .stdout .write ( '\n -> ' ) ;
sys .stdout .flush ( )
else :
# user entered a message
#msg = message_entry.get().encode() #sys.stdin.readline().encode()
s.send ( msg.encode ( ) )
msg2 = sys .stdin .readline ( ) .encode ( )
s.send ( msg2)
sys .stdout .write ( '\n -> ' ) ;
sys .stdout .flush ( )
message_entry.delete ( 0 , 'end' )
if __name__ == "__main__" :
sys .exit ( chat_client( ) )
aW1wb3J0IHN5cwppbXBvcnQgc29ja2V0CmltcG9ydCBzZWxlY3QKZnJvbSB0a2ludGVyIGltcG9ydCAqCgoKZGVmIGNoYXRfY2xpZW50KCk6CiAgICAjIGluaXRpYWxpemUgR1VJCiAgICB3aW5kb3cgPSBUaygpCiAgICB3aW5kb3cuZ2VvbWV0cnkoIjYwMHg4MDAiKQogICAgd2luZG93LnRpdGxlKCJDb21tdW5pY2F0b3IiKQoKICAgIHcgPSBDYW52YXMod2luZG93LCB3aWR0aD01ODAsIGhlaWdodD00NTAsIGJnPSJpdm9yeTIiKQogICAgdy5wbGFjZSh4PTUsIHk9MzAwKQoKICAgICMgd2hvbGUgY29udmVyc2F0aW9uIGlzIHN0b3JlZCBoZXJlCiAgICBjb252ZXJzYXRpb24gPSBUZXh0KHdpbmRvdywgd2lkdGg9ODAsIGhlaWdodD0zMCwgd3JhcD1XT1JEKQogICAgY29udmVyc2F0aW9uLnBsYWNlKHg9MTAsIHk9MzEwKQogICAgbGFiZWxfZW50ZXIgPSBMYWJlbCh3aW5kb3csIHRleHQ9IkVudGVyIG1lc3NhZ2U6ICIpCiAgICBsYWJlbF9lbnRlci5wbGFjZSh4PTUsIHk9MjApCgogICAgIyB0aGUgbWVzc2FnZSBmcm9tIGhlcmUgaXMgYmVpbmcgdGFrZW4gdG8gc2VuZCAvIHdyaXRlIG9uIHN0ZCBvdXQKICAgIG1lc3NhZ2VfZW50cnkgPSBFbnRyeSh3aW5kb3csIHdpZHRoPTMwKQogICAgbWVzc2FnZV9lbnRyeS5wbGFjZSh4PTEyMCwgeT0yMCkKCiAgICBtc2cgPSAiIgoKICAgIGRlZiBzYXkoKToKICAgICAgICB4ID0gbWVzc2FnZV9lbnRyeS5nZXQoKQogICAgICAgIHN5cy5zdGRvdXQud3JpdGUoeCkKICAgICAgICBjb252ZXJzYXRpb24uaW5zZXJ0KDAuMCwgeCArICdcbicpCiAgICAgICAgbXNnID0gbWVzc2FnZV9lbnRyeS5nZXQoKS5lbmNvZGUoKQogICAgICAgIG1lc3NhZ2VfZW50cnkuZGVsZXRlKDAsICdlbmQnKQoKCiAgICBidG5fc2VuZCA9IEJ1dHRvbih3aW5kb3csIHRleHQ9IlNlbmQhIiwgY29tbWFuZD1zYXkpLnBsYWNlKHg9MTIwLCB5PTUwKQoKICAgICNUSElTIFNFRU1TIFRPIEJFIFRIRSBQUk9CTEVNISEhCiAgICB3aW5kb3cubWFpbmxvb3AoKQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKICAgIGhvc3QgPSAnbG9jYWxob3N0JwogICAgcG9ydCA9IDg4ODgKCiAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgcy5zZXR0aW1lb3V0KDIpCgogICAgIyBjb25uZWN0IHRvIHJlbW90ZSBob3N0CiAgICB0cnk6CiAgICAgICAgcy5jb25uZWN0KChob3N0LCBwb3J0KSkKCiAgICBleGNlcHQ6CiAgICAgICAgcHJpbnQoJ1VuYWJsZSB0byBjb25uZWN0JykKICAgICAgICBzeXMuZXhpdCgpCgogICAgcHJpbnQoJ0Nvbm5lY3RlZCB0byByZW1vdGUgaG9zdC4gWW91IGNhbiBzdGFydCBzZW5kaW5nIG1lc3NhZ2VzJykKICAgICNzeXMuc3Rkb3V0LndyaXRlKCdbTWVdICcpCiAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKCiAgICB3aGlsZSAxOgoKICAgICAgICBzb2NrZXRfbGlzdCA9IFtzeXMuc3RkaW4sIHNdCgogICAgICAgICMgR2V0IHRoZSBsaXN0IHNvY2tldHMgd2hpY2ggYXJlIHJlYWRhYmxlCiAgICAgICAgcmVhZHlfdG9fcmVhZCwgcmVhZHlfdG9fd3JpdGUsIGluX2Vycm9yID0gc2VsZWN0LnNlbGVjdChzb2NrZXRfbGlzdCwgW10sIFtdLCAxKQoKICAgICAgICBmb3Igc29jayBpbiByZWFkeV90b19yZWFkOgogICAgICAgICAgICBpZiBzb2NrID09IHM6CiAgICAgICAgICAgICAgICAjIGluY29taW5nIG1lc3NhZ2UgZnJvbSByZW1vdGUgc2VydmVyLCBzCiAgICAgICAgICAgICAgICBkYXRhID0gc29jay5yZWN2KDQwOTYpCiAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKICAgICAgICAgICAgICAgICAgICBwcmludCgnXG5EaXNjb25uZWN0ZWQgZnJvbSBjaGF0IHNlcnZlcicpCiAgICAgICAgICAgICAgICAgICAgc3lzLmV4aXQoKQogICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAjIHByaW50IGRhdGEKICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cihkYXRhKSkKICAgICAgICAgICAgICAgICAgICAjY29udmVyc2F0aW9uLmluc2VydCgwLjAsIHN0cihkYXRhKSArICdcbicpCiAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4tPiAnKTsKICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIHVzZXIgZW50ZXJlZCBhIG1lc3NhZ2UKICAgICAgICAgICAgICAgICNtc2cgPSBtZXNzYWdlX2VudHJ5LmdldCgpLmVuY29kZSgpICNzeXMuc3RkaW4ucmVhZGxpbmUoKS5lbmNvZGUoKQogICAgICAgICAgICAgICAgcy5zZW5kKG1zZy5lbmNvZGUoKSkKICAgICAgICAgICAgICAgIG1zZzIgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKS5lbmNvZGUoKQogICAgICAgICAgICAgICAgcy5zZW5kKG1zZzIpCiAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbi0+ICcpOwogICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICAgICBtZXNzYWdlX2VudHJ5LmRlbGV0ZSgwLCAnZW5kJykKCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgc3lzLmV4aXQoY2hhdF9jbGllbnQoKSk=
stdout
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