Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 29, 2017 15:26:05

EvgeniQwerty
Зарегистрирован: 2017-10-29
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter и бесконечный цикл

Доброго времени суток. Возникла такая проблема. Нужно написать чат на питоне с 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)

Офлайн

#2 Окт. 29, 2017 15:52:26

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

tkinter и бесконечный цикл

ты идешь неверным путем
тебе сюда

Офлайн

#3 Окт. 29, 2017 16:31:34

EvgeniQwerty
Зарегистрирован: 2017-10-29
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter и бесконечный цикл

vic57
ты идешь неверным путемтебе сюда
Спасибо за ответ, но мне именно на tkinter'e нужно. Лаба такая.

Офлайн

#4 Окт. 29, 2017 20:13:53

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

tkinter и бесконечный цикл

EvgeniQwerty
Спасибо за ответ, но мне именно на tkinter'e нужно. Лаба такая.
на сервере GUI не нужен, на клиенте смотри методы after, update
http://russianlutheran.org/python/summary/summary.htm
https://habrahabr.ru/post/151623/

Отредактировано vic57 (Окт. 29, 2017 20:24:49)

Офлайн

#5 Окт. 29, 2017 22:08:14

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

tkinter и бесконечный цикл

ХЗ первая ссылка в гугле по запросу tkinter socket
https://github.com/praven0894/Chat-with-tkinter-and-socket



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version