Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf_8 -*-
- import gi
- gi.require_version('Gtk', '3.0')
- from gi.repository import Gtk
- from gi.repository import Gdk
- from gi.repository import GLib
- from gi.repository import GObject
- import cairo
- import threading
- import time
- class Window01(Gtk.Window):
- def __init__(self):
- self.window_width = 400
- self.window_height = 400
- Gtk.Window.__init__(self)
- self.set_title('SieveOfEratosthenes Test')
- self.set_position(Gtk.WindowPosition.CENTER)
- self.set_property("width-request", self.window_width)
- self.set_property("height-request", self.window_height)
- self.set_border_width(5)
- self.connect('destroy', Gtk.main_quit)
- self.stopflag01 = 0
- self.execflag01 = 0
- self.vbox = Gtk.Box()
- self.vbox.set_orientation(Gtk.Orientation.VERTICAL)
- self.add(self.vbox)
- self.scrolled_window01 = Gtk.ScrolledWindow()
- self.scrolled_window01.set_shadow_type(Gtk.ShadowType.ETCHED_OUT)
- self.scrolled_window01.set_policy(Gtk.PolicyType.ALWAYS, Gtk.PolicyType.ALWAYS)
- self.scrolled_window01.set_property("width-request", self.window_width)
- self.scrolled_window01.set_property("height-request", self.window_height - 40)
- self.vbox.pack_start(self.scrolled_window01, False, False, 0)
- self.textview01 = Gtk.TextView()
- self.scrolled_window01.add(self.textview01)
- self.set_text(self.textview01, "")
- self.hbox01 = Gtk.Box()
- self.hbox01.set_orientation(Gtk.Orientation.HORIZONTAL)
- self.vbox.pack_start(self.hbox01, False, False, 0)
- self.button01 = Gtk.Button(Gtk.STOCK_QUIT)
- self.hbox01.pack_end(self.button01, False, False, 0)
- self.button01.connect('clicked', Gtk.main_quit)
- self.button02 = Gtk.Button()
- self.button02.set_label('開始')
- self.hbox01.pack_end(self.button02, False, False, 0)
- self.button02.connect('clicked', self.thread_func)
- def sieve_of_eratosthenes_func(self):
- max_number = 200000
- Gdk.threads_enter()
- self.delete_text(self.textview01)
- self.append_text(self.textview01, "エラトステネスのふるい\n素数を求めます\n")
- Gdk.threads_leave()
- self.start_time = time.time()
- num_array = []
- num_array.append(False)
- num_array.append(False)
- for i in range(2, max_number):
- num_array.append(True)
- for i in range(max_number):
- if (num_array[i] != False):
- j = 2
- while ((j * i) < max_number):
- num_array[j * i] = False
- j = j + 1
- self.end_time = time.time()
- for i in range(max_number):
- if num_array[i] == True:
- Gdk.threads_enter()
- self.append_text(self.textview01, "{0:d}\n".format(i))
- Gdk.threads_leave()
- Gdk.threads_enter()
- self.append_text(self.textview01, "実行時間 : {0:.4f}秒\n".format(self.end_time - self.start_time))
- Gdk.threads_leave()
- time.sleep(0.500)
- Gdk.threads_enter()
- self.scroll_to_bottom(self.scrolled_window01)
- Gdk.threads_leave()
- self.execflag01 = 0
- def delete_text(self, textview):
- buffer = textview.get_buffer()
- start = buffer.get_start_iter()
- end = buffer.get_end_iter()
- buffer.delete(start, end)
- def set_text(self, textview, text):
- buffer = textview.get_buffer()
- buffer.set_text(text)
- def append_text(self, textview, text):
- buffer = textview.get_buffer()
- iter = buffer.get_end_iter()
- buffer.insert(iter, text)
- def scroll_to_bottom(self, scrolled_window):
- vadj = scrolled_window.get_vadjustment()
- size = vadj.get_upper() - vadj.get_page_size()
- if size < 0:
- size = 0
- vadj.set_value(size)
- def thread_func(self, data):
- if self.execflag01 == 0:
- self.execflag01 = 1
- self.stopflag01 = 0
- self.thread = threading.Thread(target=self.sieve_of_eratosthenes_func)
- self.thread.start()
- GObject.threads_init()
- Gdk.threads_init()
- Gdk.threads_enter()
- window = Window01()
- window.show_all()
- Gtk.main()
- Gdk.threads_leave()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement