Δημοσιεύτηκε: 05 Οκτ 2011, 22:45
Ευχαριστώ για τις απαντήσεις, και συγγνώμη που άργησα να τα δω, προέκυψαν κάτι θέματα υγείας.
Διαπίστωσα ότι με κάποιες μικροαλλαγές στον κώδικα το spinner ξεκινάει κανονικά και ταυτόχρονα γίνεται και η αντιγραφή των αρχείων. Μόλις ολοκληρωθεί η αντιγραφή, τίθεται το killEvent. Το πρόβλημα τώρα είναι ότι αν επιχειρήσω να βάλω κάποια λούπα που να ελέγχει πότε τίθεται το killEvent ή αν βάλω killEvent.wait() το spinner παγώνει και πάλι.....
Επίσης παραθέτω το αντίστοιχο glade αρχείο :
@medigeek : το πρώτο λινκ δε μου ανοίγει, και στο δεύτερο δεν καταλαβαίνω τι γίνεται. βσκ, έψαξα για το gobject στον γούγλη, αλλά μπερδεύτηκα ακόμη περισσότερο. Νομίζω ότι μάλλον αυτό κάνει για την περίπτωσή μου, αλλά δεν μπορώ να καταλάβω πώς λειτουργεί. Μήπως θα μπορούσε να εξηγήσει κάποιος;;;

Διαπίστωσα ότι με κάποιες μικροαλλαγές στον κώδικα το spinner ξεκινάει κανονικά και ταυτόχρονα γίνεται και η αντιγραφή των αρχείων. Μόλις ολοκληρωθεί η αντιγραφή, τίθεται το killEvent. Το πρόβλημα τώρα είναι ότι αν επιχειρήσω να βάλω κάποια λούπα που να ελέγχει πότε τίθεται το killEvent ή αν βάλω killEvent.wait() το spinner παγώνει και πάλι.....
- Κώδικας: Επιλογή όλων
#! /usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk
import threading
import thread
from multiprocessing import Process, Event
import time
def copying () :
print("Copying...")
time.sleep(1)
print("Copying...")
time.sleep(1)
print("Copying...")
time.sleep(1)
print("Copying...")
time.sleep(1)
return True
class Synchronaiz() :
def __init__(self) :
builder = gtk.Builder()
builder.add_from_file("synchronaiz.glade")
self.mainwindow = builder.get_object("mainwindow")
self.donewindow = builder.get_object("donewindow")
self.statuslabel = builder.get_object("statuslabel")
self.spinner = builder.get_object("spinner")
builder.connect_signals(self)
def on_window_destroy(self, widget, data=None) :
gtk.main_quit()
def on_synchbutton_clicked(self, widget, data=None) :
def startSpinner(killEvent) :
self.statuslabel.set_text(u'Synching... It may take a few minutes.')
self.spinner.show()
self.spinner.start()
print("spinner running.")
def startCopying(event) :
isdone = False
isdone = copying()
print("copying returned.")
print(isdone)
if (isdone == True) :
event.set()
print("event set.")
def checkCopying(event, killEvent) :
print("checkCopying entered.")
event.wait()
print("Copying is done.")
killEvent.set()
print("killEvent set.")
event = Event()
event.clear()
killEvent = Event()
killEvent.clear()
t = Process(target=checkCopying, args=(event, killEvent))
t.start()
cop = Process(target=startCopying, args=(event, ))
cop.start()
spin = Process(target=startSpinner(killEvent), args=(killEvent, ))
spin.start()
spin.terminate()
## Do something to check if killEvent has been set.
if __name__ == '__main__' :
synch = Synchronaiz()
synch.mainwindow.show()
gtk.main()
Επίσης παραθέτω το αντίστοιχο glade αρχείο :
Spoiler: show
@medigeek : το πρώτο λινκ δε μου ανοίγει, και στο δεύτερο δεν καταλαβαίνω τι γίνεται. βσκ, έψαξα για το gobject στον γούγλη, αλλά μπερδεύτηκα ακόμη περισσότερο. Νομίζω ότι μάλλον αυτό κάνει για την περίπτωσή μου, αλλά δεν μπορώ να καταλάβω πώς λειτουργεί. Μήπως θα μπορούσε να εξηγήσει κάποιος;;;