gtl.gdk.thread_init lässt Programme nicht laufen
Verfasst: Freitag 4. April 2008, 18:48
				
				Ich will über einen Socket was empfangen ohne das die GUI einfriert.
Problem ist das gtk.gdk.threads_init() nicht funktioniert bei mir
Selbst Programme die ich aus dem internet lade gehen nicht wo steht das sie funktionieren.
sobald ich gtk.gdk.thread_init() rausnehme starten die Programme!
Wenn ich es drinn habe öffnet sich ein kleines leeres Fenster das auf nichts reagiert!
Gibt es dafür iergendeine Lösung?
EDIT: Hier der Code
			Problem ist das gtk.gdk.threads_init() nicht funktioniert bei mir
Selbst Programme die ich aus dem internet lade gehen nicht wo steht das sie funktionieren.
sobald ich gtk.gdk.thread_init() rausnehme starten die Programme!
Wenn ich es drinn habe öffnet sich ein kleines leeres Fenster das auf nichts reagiert!
Gibt es dafür iergendeine Lösung?
EDIT: Hier der Code
Code: Alles auswählen
#Hills Messenger
import gtk
import pygtk
import socket
import sys
import threading
 
class cchatwindow:
    def delete_event(self, widget, event, data=None):
        if self.bcd == True:
            self.socket.close()
        return False
    def destroy(self, widget, data=None):
        gtk.main_quit()
    def textsend(self, widget, data=None):
        if self.itext.get_text() is not "":
            self.text += self.itext.get_text()+"\n"
            self.socket.send(self.text)
            self.textbuffer.set_text(self.text)
            self.textview.scroll_to_iter(self.textbuffer.get_end_iter(), 0.0, True, 0.0, 0.0) 
    def itextclear(self,widget, data=None):
        self.itext.set_text("")
    def empf(self):
        gtk.threads_enter()
        msg = self.socket.recv(1024)
        self.textbuffer.insert(self.textbuffer.get_end_iter(),msg+"\n")
        gtk.threads_leave()
    def disconnect(self, widget, data=None):
        try:
            self.socket.close()
        except:
            self.textbuffer.insert(self.textbuffer.get_end_iter(),"Disconnect fehlgeschlagen!\n")
        else:
            self.textbuffer.insert(self.textbuffer.get_end_iter(),"Erfolgreich disconnected!\n")
            self.buttonc.show()
            self.buttond.hide()
            self.bcd = False
    def connect(self, widget, data=None): 
        try:
            self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.socket.connect(("127.0.0.1",51000))
        except:
            self.textbuffer.insert(self.textbuffer.get_end_iter(),"Verbinden fehlgeschlagen!\n")
        else:
            self.textbuffer.insert(self.textbuffer.get_end_iter(),"Erfolgreich verbunden!\n")
            self.buttonc.hide()
            self.buttond.show()
            self.bcd = True
    
    def __init__(self):
        gtk.gdk.threads_init()
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_title("Hills Messenger")
        self.window.set_default_size(300,300)
        self.window.connect("delete_event", self.delete_event)
        self.window.connect("destroy", self.destroy)
        
        self.vbox = gtk.VBox(False,2)
        
        self.hbox = gtk.HBox(True,0)
        
        self.button = gtk.Button("Senden")
        self.button.connect("clicked", self.textsend, None)
        self.hbox.pack_start(self.button,True,True,0)
        self.button.show()
        self.button = gtk.Button("Clear")
        self.button.connect("clicked", self.itextclear, None)
        self.hbox.pack_start(self.button,True,True,0)
        self.button.show()
        self.buttonc = gtk.Button("Connect")
        self.buttond = gtk.Button("Disconnect")
        self.buttonc.connect("clicked", self.connect, None)
        self.buttond.connect("clicked", self.disconnect, None)
        self.hbox.pack_start(self.buttonc,False,False,0)
        self.hbox.pack_start(self.buttond,False,False,0)
        self.buttonc.show()
        self.bcd = False
        
        self.textview = gtk.TextView()
        self.textview.set_editable(False)
        self.textbuffer = self.textview.get_buffer()
        self.text = ""
        self.sw = gtk.ScrolledWindow()
        self.sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        self.sw.add(self.textview)
        adj = self.sw.get_vadjustment()
        adj.set_value(adj.props.upper)
        self.sw.show()
        self.textview.show()
        self.itext = gtk.Entry(0)
        self.vbox2 = gtk.VBox(False,0)
        self.vbox2.pack_start(self.sw, True, True, 0)
        self.vbox.pack_start(self.itext, False, False, 0)
        self.itext.show()
        self.vbox.pack_start(self.hbox, False, False, 2)
        self.hbox.show()
        self.vbox.show()
        self.vbox2.pack_start(self.vbox, False, False, 0)
        self.vbox2.show()
        self.window.add(self.vbox2)
        self.window.show()
def main():
    gtk.main()
    return 0
if __name__ == "__main__":
    cchatwindow()
    main()