Note that there are some explanatory texts on larger screens.

plurals
  1. POPython - how to run the gtk.main() which does not block my whole application and allow me to do multi-tasking?
    primarykey
    data
    text
    <p>I have this Python skeleton, where main.py is fine and server.py is fine. But the moment chat() is launched i see the GUI, but the moment <code>gtk.main()</code> was executed it does not allow any activity under server.py module nor in chat.py itself.</p> <p>How can i have the chat.py flexible so that it does not interupt other class and run all like multi-task?</p> <p>Note: os.system('/var/tmp/chat.py') when i execute from server.py then i have no issue but i problem is i cant communicate in that way (so trying to avoid that method)</p> <p>Any idea, why and how can i make chat.py work independently without causing my whole application to be blocked until chat.py is exit? </p> <p>main.py:</p> <pre><code>#!/usr/bin/python from myglobal import bgcolors from myglobal import parsePresets from server import server from chat import chat t = server(58888) t.start() </code></pre> <p>server.py</p> <pre><code>class server(threading.Thread): def __init__(self, port): threading.Thread.__init__(self) self.port = port self.selfv = chat() self.selfv.run() def run(self): host = '' s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, self.port)) #s.setblocking(0) # non-blocking s.listen(1) conn, addr = s.accept() serverFlag = True while serverFlag: try: data = conn.recv(1024) except socket.error: s.listen(1) conn, addr = s.accept() continue if not data: s.listen(1) conn, addr = s.accept() else: line = data conn.send('ok') conn.close() </code></pre> <p>chat.py</p> <pre><code>class chat(object): def listener(self, sock, *args): conn, addr = sock.accept() gobject.io_add_watch(conn, gobject.IO_IN, self.handler) return True def handler(self, conn, *args): line = conn.recv(4096) if not len(line): return False else: return True def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_size_request(800, 450) self.window.move(0,0) self.window.set_name("main window") self.window.connect("delete-event", gtk.main_quit) self.drawingarea = gtk.DrawingArea() self.window.add(self.drawingarea) def run(self): self.sock = socket.socket() self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.sock.bind(('', 58881)) self.sock.listen(1) gobject.io_add_watch(self.sock, gobject.IO_IN, self.listener) self.window.show_all() self.window.set_keep_above(True) if(self.window.get_window().get_state() == gtk.gdk.WINDOW_STATE_MAXIMIZED): self.window.unmaximize() gtk.main() def quit(self): gtk.main_quit() #if __name__=='__main__': # s=SelfView() # s.run() #gobject.MainLoop.run() </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload