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

Κώδικας: Επιλογή όλων

#! /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
Κώδικας: Επιλογή όλων
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="2.24"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkDialog" id="donewindow">
<property name="can_focus">False</property>
<property name="border_width">5</property>
<property name="title" translatable="yes">Done!</property>
<property name="resizable">False</property>
<property name="window_position">center</property>
<property name="type_hint">dialog</property>
<signal name="destroy" handler="on_window_destroy" swapped="no"/>
<child internal-child="vbox">
<object class="GtkVBox" id="dialog-vbox2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">2</property>
<child internal-child="action_area">
<object class="GtkHButtonBox" id="dialog-action_area2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkButton" id="exbutton">
<property name="label">gtk-quit</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="border_width">8</property>
<property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="on_window_destroy" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="donelabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Synching finished!</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
<action-widgets>
<action-widget response="0">exbutton</action-widget>
</action-widgets>
</object>
<object class="GtkWindow" id="mainwindow">
<property name="width_request">350</property>
<property name="height_request">200</property>
<property name="can_focus">False</property>
<property name="title" translatable="yes">Main Window</property>
<property name="resizable">False</property>
<property name="window_position">center</property>
<property name="urgency_hint">True</property>
<signal name="destroy" handler="on_window_destroy" swapped="no"/>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="statuslabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinner" id="spinner">
<property name="height_request">20</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">15</property>
<child>
<object class="GtkButton" id="synchbutton">
<property name="label" translatable="yes">Synch!</property>
<property name="height_request">10</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="border_width">25</property>
<property name="use_action_appearance">False</property>
<signal name="clicked" handler="on_synchbutton_clicked" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="exibutton">
<property name="label">gtk-quit</property>
<property name="height_request">10</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="border_width">25</property>
<property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="on_window_destroy" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</interface>


@medigeek : το πρώτο λινκ δε μου ανοίγει, και στο δεύτερο δεν καταλαβαίνω τι γίνεται. βσκ, έψαξα για το gobject στον γούγλη, αλλά μπερδεύτηκα ακόμη περισσότερο. Νομίζω ότι μάλλον αυτό κάνει για την περίπτωσή μου, αλλά δεν μπορώ να καταλάβω πώς λειτουργεί. Μήπως θα μπορούσε να εξηγήσει κάποιος;;; :geek: :problem: