Aztec Δημοσ. 13 Σεπτεμβρίου 2018 Δημοσ. 13 Σεπτεμβρίου 2018 (επεξεργασμένο) φτιάχνω μια εφαρμογή σε PYGTK για wine prefix management scanning κτλ. Ουσιαστικά θέλω να ξεφύγει απο αυτοματισμούς με scripts και να έχι πιο πολύ workflow για αυτούς που ξέρουν. Prefix operations : new , duplicate , scan , del , winetricks, winecfg Το θέμα μου πως θα οργανώσω τον κώδικα να φτάσω απο window στην εντολή στο σύστημα. Στην πράξη WIndow.py def _new(self, action, param): if response == Gtk.ResponseType.OK: task=NewPrefix(name,arch) self._runner_start(action, task) def _runner_start(self,action,task): worker=Runner(action,self._runner_end,task) worker.start() runner.py class Runner(Thread): def __init__(self,action,callback,task): Thread.__init__(self) self.action=action self.callback=callback self.task=task def run(self): result=self.task.execute() GLib.idle_add(self.callback,result,self.action,self.task) task.py class NewPrefix(): DEFAULT_PATH='~/.wine_prefixes/' COMMAND_NEW='WINEPREFIX=%s%s WINEARCH=%s wine wineboot' def __init__(self, name, arch, path=None): self.name=name self.arch=arch def execute(self): result=oscommand(self.COMMAND_NEW%(self.DEFAULT_PATH,self.name,self.arch)) return result Το απο πάνω παίζει . Αλλά δεν μου αρέσει και εχω αλλάξει τον κώδικα πολλές φορές Λέω μήπως να φτιάξω μια κλάση WinePrefix με μια run() η οποία θα καλεί βάση του actions την αντίστοιχη function ? Δηλαδή class WinePrefix(Thread): def __init__(self,action): self.callback=callback self.action=action def run(self): if self.action.get_name()=='new': self.new_prefix() if self.action.get_name()=='del': self.del_prefix() if self.action.get_name()=='cpy': self.cpy_prefix() GLib.idle_add(self.callback,result,self.action,self.task) def new_prefix(self): def del_prefix(self): def cpy_prefix(self): οπότε απλά κάνω call if response == Gtk.ResponseType.OK: task=WinePrefix(action,self._runner_end,....) task.start() Έχετε καμιά ιδέα ? Ίσως πιο pythonic ? Μπορώ να κάνω φυσικά και απευθείας call σε function ... τέσπα επειδή ερχομαι απο java και τα βλέπω όλα κλάσεις ίσως να μην έχω σωστό approach Και κάποια screenshot Επεξ/σία 13 Σεπτεμβρίου 2018 από Aztec
Aztec Δημοσ. 14 Σεπτεμβρίου 2018 Μέλος Δημοσ. 14 Σεπτεμβρίου 2018 Εντάξει έβγαλα άκρη με την ακόλουθη λογική στην window delete operation. 'Εχω φτιάξει εναν runner ο οποίος τους λες την function και την εκτελεί κρατώντας το object initilization def _delete(self, action, param): prefix=self.treeview.get_selection() if prefix is None: return dialog = DeleteDialog(self,prefix.name) response = dialog.run() dialog.destroy() if response == Gtk.ResponseType.OK: runner=Runner(action,self._paction_end,prefix,prefix.remove) runner.start() self._loading() Ουσιαστικά ο runner κρατάει το state του object και το callback και εκτελεί το target οπου έχει περαστεί Runner.py class Runner(Thread): def __init__(self, action, callback, prefix, target, args=None): Thread.__init__(self) self.action=action.get_name() self.callback=callback self.prefix=prefix self.target=target self.args=args def run(self): if self.args==None: result=self.target() else : result=self.target(self.args) GLib.idle_add(self.callback,self.action,result,self.prefix) τέλος η Prefix κλάση έχει όλα τα actions χωρίς να την ενδιαφερει το threading , callback etc
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα