gtl.gdk.thread_init lässt Programme nicht laufen

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Hillkorn
User
Beiträge: 12
Registriert: Samstag 19. Januar 2008, 19:31
Kontaktdaten:

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

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()
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Freitag 4. April 2008, 23:32

Windows User? ;)
PyGTK FAQ gelesen?
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Antworten