Как сделать так, чтобы отображение при нажатии на кнопку button происходило сразу, а не по окончании всех вычислений. Как можно видеть из кода при нажатии на кнопку происходит следующее: начинается цикл из 5 итераций, в каждой итерации задержка на 1 секунду. В теле цикла так же имеется строка label2.text("#{var.value().to_i-i}") но её отображение не происходит каждую секунду, оно происходит тольок по-окончании последней итерации цикла. Знает ли кто-нибудь в чём прикол ТК? Что это за урезанность в функциональности...
| Код |
Код: view plaincopy to clipboardprint?
1. require 'tk' 2. #Signal.trap("EXIT"){ print "\a\a\a aaa" } 3. 4. def shutdown() 5. #system("shutdown -s -t 30") 6. end 7. 8. 9. root = TkRoot.new('background' => 'green') { 10. title "limiter 2007" 11. cursor 'X_cursor' 12. resizable(0, 0) 13. #"Destroy",proc {shutdown()} 14. } 15. root.geometry '200x110' 16. menuline1 = TkFrame.new(root, 'relief'=>'raised', 'borderwidth'=>1).pack('side'=>'top', 'fill'=>'x') 17. menuline2 = TkFrame.new(root, 'relief'=>'raised', 'borderwidth'=>0,'background' => 'black').pack( 'side'=>'left','fill'=>'y') 18. 19. ##events 20. #root.bind("Destroy"){shutdown()} 21. #root.bind("Destroy",proc {shutdown()}) 22. 23. 24. 25. #label 1 26. label1 = TkLabel.new(menuline1) { 27. text "L I M I T E R" 28. padx 1 ; pady 0; 29. }.pack("side"=>"top") 30. label1.font(TkFont.new(:size => 15)) 31. 32. #enter 33. entry = TkEntry.new(menuline2){ 34. width 6 35. }.pack() 36. var = TkVariable.new("0") 37. entry.textvariable(var) 38. entry.font(TkFont.new(:size => 15)) 39. entry.focus 40. 41. #label 2 42. label2 = TkLabel.new(root,'background' => 'green') { text "0" } 43. label2.font(TkFont.new(:size => 40)) 44. 45. #button 46. button = TkButton.new(menuline2) { 47. text "start" 48. width 5 49. height 1 50. command proc { 51. label2.text "#{var.value()}" 52. for i in 0..5 53. sleep 1 54. label2.text("#{var.value().to_i-i}") 55. $stdout.flush 56. label2.pack() 57. end 58. } 59. }.pack("side"=>"right") 60. button.font(TkFont.new(:size => 15)) 61. 62. 63. label2.pack() 64. 65. 66. 67. Tk.mainloop() 68. =begin 69. limit = 75 70. 71. while limit > 0 72. print "\r Time: #{limit} minute" 73. $stdout.flush 74. sleep 60 75. limit-=1 76. end 77. print "\a\a\a\a\a" 78. shutdown() 79. =end
|
|