Advertisement
Guest User

Untitled

a guest
Feb 3rd, 2018
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.36 KB | None | 0 0
  1. # -*- coding: utf_8 -*-
  2.  
  3. import gi
  4. gi.require_version('Gtk', '3.0')
  5. from gi.repository import Gtk
  6. from gi.repository import Gdk
  7. from gi.repository import GLib
  8. from gi.repository import GObject
  9. import cairo
  10. import threading
  11. import time
  12.  
  13. class Window01(Gtk.Window):
  14. def __init__(self):
  15. self.window_width = 400
  16. self.window_height = 400
  17.  
  18. Gtk.Window.__init__(self)
  19. self.set_title('SieveOfEratosthenes Test')
  20. self.set_position(Gtk.WindowPosition.CENTER)
  21. self.set_property("width-request", self.window_width)
  22. self.set_property("height-request", self.window_height)
  23. self.set_border_width(5)
  24. self.connect('destroy', Gtk.main_quit)
  25.  
  26. self.stopflag01 = 0
  27. self.execflag01 = 0
  28.  
  29. self.vbox = Gtk.Box()
  30. self.vbox.set_orientation(Gtk.Orientation.VERTICAL)
  31. self.add(self.vbox)
  32.  
  33. self.scrolled_window01 = Gtk.ScrolledWindow()
  34. self.scrolled_window01.set_shadow_type(Gtk.ShadowType.ETCHED_OUT)
  35. self.scrolled_window01.set_policy(Gtk.PolicyType.ALWAYS, Gtk.PolicyType.ALWAYS)
  36. self.scrolled_window01.set_property("width-request", self.window_width)
  37. self.scrolled_window01.set_property("height-request", self.window_height - 40)
  38. self.vbox.pack_start(self.scrolled_window01, False, False, 0)
  39.  
  40. self.textview01 = Gtk.TextView()
  41. self.scrolled_window01.add(self.textview01)
  42. self.set_text(self.textview01, "")
  43.  
  44. self.hbox01 = Gtk.Box()
  45. self.hbox01.set_orientation(Gtk.Orientation.HORIZONTAL)
  46. self.vbox.pack_start(self.hbox01, False, False, 0)
  47.  
  48. self.button01 = Gtk.Button(Gtk.STOCK_QUIT)
  49. self.hbox01.pack_end(self.button01, False, False, 0)
  50. self.button01.connect('clicked', Gtk.main_quit)
  51.  
  52. self.button02 = Gtk.Button()
  53. self.button02.set_label('開始')
  54. self.hbox01.pack_end(self.button02, False, False, 0)
  55. self.button02.connect('clicked', self.thread_func)
  56.  
  57. def sieve_of_eratosthenes_func(self):
  58. max_number = 200000
  59.  
  60. Gdk.threads_enter()
  61. self.delete_text(self.textview01)
  62. self.append_text(self.textview01, "エラトステネスのふるい\n素数を求めます\n")
  63. Gdk.threads_leave()
  64.  
  65. self.start_time = time.time()
  66. num_array = []
  67. num_array.append(False)
  68. num_array.append(False)
  69. for i in range(2, max_number):
  70. num_array.append(True)
  71. for i in range(max_number):
  72. if (num_array[i] != False):
  73. j = 2
  74. while ((j * i) < max_number):
  75. num_array[j * i] = False
  76. j = j + 1
  77.  
  78. self.end_time = time.time()
  79.  
  80. for i in range(max_number):
  81. if num_array[i] == True:
  82. Gdk.threads_enter()
  83. self.append_text(self.textview01, "{0:d}\n".format(i))
  84. Gdk.threads_leave()
  85.  
  86. Gdk.threads_enter()
  87. self.append_text(self.textview01, "実行時間 : {0:.4f}秒\n".format(self.end_time - self.start_time))
  88. Gdk.threads_leave()
  89. time.sleep(0.500)
  90. Gdk.threads_enter()
  91. self.scroll_to_bottom(self.scrolled_window01)
  92. Gdk.threads_leave()
  93. self.execflag01 = 0
  94.  
  95.  
  96.  
  97. def delete_text(self, textview):
  98. buffer = textview.get_buffer()
  99. start = buffer.get_start_iter()
  100. end = buffer.get_end_iter()
  101. buffer.delete(start, end)
  102.  
  103. def set_text(self, textview, text):
  104. buffer = textview.get_buffer()
  105. buffer.set_text(text)
  106.  
  107. def append_text(self, textview, text):
  108. buffer = textview.get_buffer()
  109. iter = buffer.get_end_iter()
  110. buffer.insert(iter, text)
  111.  
  112. def scroll_to_bottom(self, scrolled_window):
  113. vadj = scrolled_window.get_vadjustment()
  114. size = vadj.get_upper() - vadj.get_page_size()
  115. if size < 0:
  116. size = 0
  117. vadj.set_value(size)
  118.  
  119.  
  120. def thread_func(self, data):
  121. if self.execflag01 == 0:
  122. self.execflag01 = 1
  123. self.stopflag01 = 0
  124. self.thread = threading.Thread(target=self.sieve_of_eratosthenes_func)
  125. self.thread.start()
  126.  
  127. GObject.threads_init()
  128. Gdk.threads_init()
  129. Gdk.threads_enter()
  130. window = Window01()
  131. window.show_all()
  132. Gtk.main()
  133. Gdk.threads_leave()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement