Сообщения 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()