Форум сайта python.su
Доброго времени суток. Возникла такая проблема. Нужно написать чат на питоне с GUI на tkinter. На консольке чат написал без проблем. А вот с гуем возникли проблемы. Понятия не имею, как сделать так, чтобы одновременно выполнялся мой бесконечный цикл и бесконечный цикл из tkinter. На tkinter ничего никогда не писал, поэтому, скорее всего, вопрос очень нубский. Буду очень признателен, если
То, что я пытался сделать.
import socket, select, sys from tkinter import * def prompt(name) : log.insert(END, '<You> ') host = 'localhost' port = 5000 tk = Tk() text = StringVar() name = StringVar() name.set('User') text.set('') tk.title('MegaChat') tk.geometry('400x300') log = Text(tk) nick = Entry(tk, textvariable=name) msg = Entry(tk, textvariable=text) msg.pack(side='bottom', fill='x', expand='true') nick.pack(side='bottom', fill='x', expand='true') log.pack(side='top', fill='both',expand='true') s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(2) # connect to remote host try : s.connect((host, port)) except : log.insert(END, 'Unable to connect\n') #sys.exit() log.insert(END, 'Connected to remote host. Start sending messages') while 1: socket_list = [s] # Get the list sockets which are readable read_sockets, write_sockets, error_sockets = select.select(socket_list , [], []) for sock in read_sockets: #incoming message from remote server if sock == s: data = sock.recv(4096).decode() if not data : log.insert(END, '\nDisconnected from chat server') #sys.exit() else : #print data prompt() log.insert(END, data) #user entered a message else: s.send(text.encode()) #prompt() #вот сюда он не доходит из-за бесконечного цикла выше tk.mainloop()
import socket, select, string, sys def prompt() : sys.stdout.write('<You> ') sys.stdout.flush() #main function if __name__ == "__main__": host = 'localhost' port = 5000 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. Start sending messages') prompt() while 1: socket_list = [sys.stdin, s] # Get the list sockets which are readable read_sockets, write_sockets, error_sockets = select.select(socket_list , [], []) for sock in read_sockets: #incoming message from remote server if sock == s: data = sock.recv(4096).decode() if not data : print('\nDisconnected from chat server') sys.exit() else : #print data sys.stdout.write(data) prompt() #user entered a message else : msg = sys.stdin.readline() s.send(msg.encode()) prompt()
Отредактировано EvgeniQwerty (Окт. 29, 2017 15:30:02)
Офлайн
ты идешь неверным путем
тебе сюда
Офлайн
vic57Спасибо за ответ, но мне именно на tkinter'e нужно. Лаба такая.
ты идешь неверным путемтебе сюда
Офлайн
EvgeniQwertyна сервере GUI не нужен, на клиенте смотри методы after, update
Спасибо за ответ, но мне именно на tkinter'e нужно. Лаба такая.
Отредактировано vic57 (Окт. 29, 2017 20:24:49)
Офлайн
ХЗ первая ссылка в гугле по запросу tkinter socket
https://github.com/praven0894/Chat-with-tkinter-and-socket
[code python][/code]
Офлайн