Sry, also es klappt jetzt, mein Problem war, das ich
nicht benutzt habe. Wenn man einen Thread hat der nicht viel machen soll, geht es auch ohne. Aber wenn der Thread länger braucht, um etwas zu machen, gibt es unter GTK große Probleme, also er führt den Thread dann überhaupt nicht aus. Damit geht nun alles problemlos, noch mal danke für den ganzen Stress mit mir kompliziertem Jungen
Jetzt stehe ich leider vor einem neuen Problem, und zwar, bekomme, ich wenn ich diese Funktion in einem Thread öfters hintereinander aufrufe, einen Speicherzugriffsfehler, aber sehr sporadisch. Hier die Funktion:
Code: Alles auswählen
def homemake_list(self, dname=None):
if not dname:
self.homedirname=os.path.expanduser("~")
else:
self.homedirname=os.path.abspath(dname)
files=[f for f in os.listdir(self.homedirname) if f[0] <> "."]
filestat=os.stat(self.homedirname)
self.homeliststore.clear()
self.homeliststore.append(["..", filestat.st_size, oct(stat.S_IMODE(filestat.st_mode)), time.ctime(filestat.st_mtime)])
for f in files:
filename=os.path.join(self.homedirname, f)
filestat=os.stat(filename)
self.homeliststore.append([f, filestat.st_size, oct(stat.S_IMODE(filestat.st_mode)), time.ctime(filestat.st_mtime)])
Den dazugehörigen TreeView mache ich so:
Code: Alles auswählen
self.homeliststore=gtk.ListStore(str, str, str, str)
self.hometreeview=gtk.TreeView(self.homeliststore)
self.hometreeview.connect("row-activated", self.homeopen)
self.ftp_menu_client=self.xml.get_widget("ftp_menu_client")
self.hometreeview.connect_object("button-press-event", self.homerigth_click, self.ftp_menu_client)
self.hometreeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE)
self.hometvcolumn=[]
self.hometvcolumn.append(" ")
self.hometvcolumn.append(gtk.TreeViewColumn("Name"))
self.hometvcolumn.append(gtk.TreeViewColumn("Size"))
self.hometvcolumn.append(gtk.TreeViewColumn("Mode"))
self.hometvcolumn.append(gtk.TreeViewColumn("Last Changed"))
for i in range(1, 5):
self.hometreeview.append_column(self.hometvcolumn[i])
self.homecell = gtk.CellRendererText()
for i in range(1,5):
self.hometvcolumn[i].pack_start(self.homecell, True)
for i in range(1,5):
self.hometvcolumn[i].set_attributes(self.homecell, text=i-1)
self.vbox17=self.xml.get_widget("vbox17")
self.homescrolledwindow1=gtk.ScrolledWindow()
self.homescrolledwindow1.add(self.hometreeview)
self.vbox17.pack_start(self.homescrolledwindow1)
(self.xml ist die glade Datei)
Den Thread rufe ich so auf:
Code: Alles auswählen
gobject.threads_init()
thread=cl_act_thread(self.homemake_list, self.progressbar2)
thread.start()
und der Thread sieht dann so aus:
Code: Alles auswählen
class cl_act_thread(threading.Thread):
def __init__(self, homemake, progressbar):
threading.Thread.__init__(self)
self.homemake_list=homemake
self.progressbar=progressbar
def run(self):
self.end_status=0
def progress(progress):
progress.pulse()
if self.end_status==0:
return True
else:
progress.set_fraction(0)
progress.set_fraction(0.2)
return False
gobject.timeout_add(50, progress, self.progressbar)
self.homemake_list()
time.sleep(0.5)
self.end_status=1
Tut mir leid, dass das jetzt alles so einzeln ist. Aber im Programm ist das leider alles sehr verteilt. Die Funktionen so, ohne alles drum und dran, habe ich noch nicht ausprobiert.
Ich habe im Internet schon Beiträge so einem Fehler von Firefox gefunden, bei dem es auch um Speicherzugriffsfehler ging. Da hieß es, das es am GTK Theme liegen könnte, und das es ging, wenn man es als Root startet. Ging aber bei leider auch nicht. Dann habe ich Beiträge gefunden, das es am Ram liegen könnte. Kann aber eig. auch nicht sein, da der Fehler sonst auch bei andren Programmen gekommen wäre. Dann habe ich bei einem Beitrag gesehen, das jemand ein Programm geschrieben hat, bei dem es keine Speicherverwaltung gab. Was ist Speicherverwaltung bei Python? Habe von so etwas nie gehört.
Danke für jede Hilfe.
edit: Manchmal steht nur
bash: line 1: 7089 Speicherzugriffsfehler /usr/bin/python "datei.py"
und manchmal kommt
sys:1: GtkWarning: gtk_list_store_get_value: assertion `VALID_ITER (iter, list_store)' failed
sys:1: Warning: g_object_set_property: assertion `G_IS_VALUE (value)' failed
sys:1: Warning: g_value_unset: assertion `G_IS_VALUE (value)' failed
bash: line 1: 7089 Speicherzugriffsfehler /usr/bin/python "datei.py"