Ich habe versucht ein simples Programm zum Berechnen vom Primzahlen zu schreiben. Es hat eine kleine Oberfläche in Pygtk. Nun möchte ich, wenn ich auf Start klicke im TextView "Gestartet" drin stehen haben bis fertig gerechnet ist. Danach soll "Fertig" ausgegeben werden. Irgendwie bekomme ich aber nur entweder "Fertig" oder "Gestartet" ausgegeben. Ich denke das Problem ist, dass ich nicht in die MainLoop komme um das Ausgabe Widget neu zu Zeichen. Deswegen habe ich versuch das ganze als Thread zu schreiben ... selbes Ergebnis
Bitte um Hilfe
#--------------------------------------------------------------------------
Code: Alles auswählen
#!/usr/bin/python
import pygtk
pygtk.require('2.0')
import gtk
from threading import Thread
class Primzahl_gui:
def __init__(self):
self.window=gtk.Window(gtk.WINDOW_TOPLEVEL)
self.out=gtk.TextView()
self.start=gtk.Button("Start")
self.vbox=gtk.VBox(False,0)
self.text=gtk.TextBuffer()
self.window.connect("delete_event",self.destroy)
self.window.connect("destroy",self.destroy)
self.window.set_border_width(10)
self.start.connect("clicked",self.calc,None)
self.out.set_buffer(self.text)
self.window.add(self.vbox)
self.vbox.pack_start(self.out)
self.vbox.pack_start(self.start)
self.window.show()
self.vbox.show()
self.out.show()
self.start.show()
def destroy(self, widget, data=None):
gtk.main_quit()
def calc(self,widget, data=None):
prim=Primzahl(self.out.get_buffer())
prim.start()
def main(self):
gtk.main()
class Primzahl(Thread):
def __init__(self,text):
Thread.__init__(self)
self.text=text
def run(self):
self.text.set_text("Gestartet")
self.datei=file("primzahlen.txt","w")
for i in range(2,10000):
for y in range(2,i):
if(i%y==0):
break
else:
self.datei.write("%s "%i)
self.datei.close()
self.text.set_text("Fertig")
prog = Primzahl_gui()
prog.main()