kpp
Новичок
библиотека TK и Ruby
Как сделать так, чтобы отображение при нажатии на кнопку button происходило сразу, а не по окончании всех вычислений.
Как можно видеть из кода при нажатии на кнопку происходит следующее:
начинается цикл из 5 итераций, в каждой итерации задержка на 1 секунду. В теле цикла так же имеется строка label2.text("#{var.value().to_i-i}") но её отображение не происходит каждую секунду, оно происходит тольок по-окончании последней итерации цикла. Знает ли кто-нибудь в чём прикол ТК? Что это за урезанность в функциональности...
Код:
view plaincopy to clipboardprint?
Как сделать так, чтобы отображение при нажатии на кнопку button происходило сразу, а не по окончании всех вычислений.
Как можно видеть из кода при нажатии на кнопку происходит следующее:
начинается цикл из 5 итераций, в каждой итерации задержка на 1 секунду. В теле цикла так же имеется строка label2.text("#{var.value().to_i-i}") но её отображение не происходит каждую секунду, оно происходит тольок по-окончании последней итерации цикла. Знает ли кто-нибудь в чём прикол ТК? Что это за урезанность в функциональности...
Код:
view plaincopy to clipboardprint?
PHP:
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