Сообщения Glade Gtk Python3

работаю с питоном3 и glade gtk.
Делаю экран чата(простой, поле,кнопка и скролллист).
Сам чат на сокетах.
Суть проблемы в том что прога уходит в состояние фриза из-за лупов в функции получения даты.
Дата в консоль приходит всё супер но сама программа умерает)
И кидает BlockingIOError: [Errno 11] Ресурс временно недоступен
Я их убирал но тогда дата вообще не приходит из-за того что раз проверяется и завершается
Использовал многопоточность чтобы можно было писать и получать сообщения одновременно.
Как можно это исправить?
Есть ли варианты.. код билдера:

#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Gdk', '3.0')
from gi.repository import Gdk,Gtk,Pango
from time import sleep
import socket, threading, time

key = 8195
shutdown = False
join = True
UI_FILE = "test.glade"


class GUI:
    def __init__(self):
        self.builder = Gtk.Builder()
        self.builder.add_from_file(UI_FILE)
        self.builder.connect_signals(self)
        self.main_container = self.builder.get_object('main_container ')
        self.window = self.builder.get_object('window')
        self.window.set_default_size(1280, 720)
        self.window.set_title('Ilab Client')
        self.window.set_resizable(False)
        self.window.show_all()
        self.main_container.show_all () 
        self.tosend = ''
    def receving (self,name, sock):
        global shutdown,key,join
        while not shutdown:
            try:
                while True:
                    data, addr = sock.recvfrom(1024)
                    decrypt = ""; k = False
                    for i in data.decode("utf-8"):
                        if i == ":":
                            k = True
                            decrypt += i
                        elif k == False or i == " ":
                            decrypt += i
                        else:
                            decrypt += chr(ord(i)^key)
                    print(decrypt)#data.decode()
                    self.main_container.show_all () 
                    self.data_t = Gtk.Label()
                    self.data_t.set_text(decrypt)
                    self.main_container.add(self.data_t)
                    self.main_container.show_all () 
                    time.sleep(0.2)
            except:
                pass
    def connector(self,window):

        global shutdown,key,join
        data_comm = self.builder.get_object('command')
        dats = data_comm.get_text().strip()
        host = socket.gethostbyname(socket.gethostname())
        port = 0
        server = ("0.0.0.0",9090)
        s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
        s.bind((host,port))
        s.setblocking(0)
        alias = 'Denver'#input("Name: ")
        rT = threading.Thread(target = self.receving, args = ("RecvThread",s))
        rT.start()
        #while shutdown == False:
        if join == False:
            s.sendto(("["+alias + "] => join chat ").encode("utf-8"),server)
            join = True
        else:
            try:
                message = dats#input()
                crypt = ""
                for i in message:
                    crypt += chr(ord(i)^key)
                message = crypt
                if message != "":
                    s.sendto(("["+alias + "] :: "+message).encode("utf-8"),server)
                time.sleep(0.2)
            except:
                s.sendto(("["+alias + "] <= left chat ").encode("utf-8"),server)
                shutdown = True
        rT.join()
        s.close()
    def sendm(self,sender):
        data_comm = self.builder.get_object('command')
        dats = data_comm.get_text().strip()
        self.main_container.show_all () 
        self.data_t = Gtk.Label()
        self.data_t.set_text('noname')
        self.main_container.add(self.data_t)
        self.main_container.show_all () 

screen = Gdk.Screen.get_default()
app = GUI()
Gtk.main()


Ответы (0 шт):