81 lines
2.1 KiB
Python
81 lines
2.1 KiB
Python
import gi
|
|
gi.require_version('Gtk', '3.0')
|
|
from gi.repository import Gtk
|
|
import time
|
|
from multiprocessing import Process, Value, Lock, Pool
|
|
|
|
class Counter(object):
|
|
def __init__(self, initval=0.0):
|
|
self.val = Value('d', initval)
|
|
self.lock = Lock()
|
|
|
|
def increment(self):
|
|
with self.lock:
|
|
self.val.value += 1/2542
|
|
print(self.val.value)
|
|
|
|
def value(self):
|
|
with self.lock:
|
|
return self.val.value
|
|
|
|
class MyWindow(Gtk.Window):
|
|
|
|
def __init__(self):
|
|
Gtk.Window.__init__(self, title = 'Hello World')
|
|
|
|
#self.val = 0
|
|
|
|
self.box = Gtk.Box(spacing=6)
|
|
self.add(self.box)
|
|
|
|
self.button1 = Gtk.Button(label = 'Hello')
|
|
self.button1.connect('clicked', self.on_button1_clicked)
|
|
self.box.pack_start(self.button1, True, True, 0)
|
|
|
|
self.button2 = Gtk.Button(label = 'Goodbye')
|
|
self.button2.connect('clicked', self.on_button2_clicked)
|
|
self.box.pack_start(self.button2, True, True, 0)
|
|
|
|
self.pbar = Gtk.ProgressBar()
|
|
self.pbar.set_fraction(0.0)
|
|
self.box.pack_start(self.pbar, True, True, 0)
|
|
|
|
def on_button1_clicked(self, widget):
|
|
print('Hello')
|
|
#procs = [Process(target=self.func, args=(counter,)) for i in range(10)]
|
|
|
|
#for p in procs: p.start()
|
|
#for p in procs: p.join()
|
|
p = Pool(2)
|
|
p.map(self.func, range(2542))
|
|
print (counter.value())
|
|
|
|
#while counter.val.value <10:
|
|
#self.update_pbar(self.pbar)
|
|
print('Goodbye')
|
|
Gtk.main_quit()
|
|
|
|
def on_button2_clicked(self, widget):
|
|
print('Goodbye')
|
|
Gtk.main_quit()
|
|
|
|
def update_pbar(self, widget, value):
|
|
#self.val += 0.1
|
|
self.pbar.set_fraction(value)
|
|
#time.sleep(0.5)
|
|
while Gtk.events_pending():
|
|
Gtk.main_iteration()
|
|
|
|
def func(self, data):
|
|
#for i in range(2542):
|
|
time.sleep(0.01)
|
|
counter.increment()
|
|
#while counter.value() <1:
|
|
#self.update_pbar(self.pbar, counter.value())
|
|
|
|
counter = Counter(0.0)
|
|
win = MyWindow()
|
|
win.connect('delete-event', Gtk.main_quit)
|
|
win.show_all()
|
|
Gtk.main()
|