tk_paradise 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of tk_paradise might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/doc/HINTS.md +318 -0
- data/lib/tk_paradise/base/base.rb +63 -0
- data/lib/tk_paradise/examples/001_dialog_box_example.rb +21 -0
- data/lib/tk_paradise/examples/002_draw_tiny_box.rb +22 -0
- data/lib/tk_paradise/examples/003_fun_with_cursors.rb +82 -0
- data/lib/tk_paradise/examples/004_hello_world_example.rb +22 -0
- data/lib/tk_paradise/examples/005_key_press_event_example.rb +21 -0
- data/lib/tk_paradise/examples/006_multiple_buttons.rb +16 -0
- data/lib/tk_paradise/examples/007_packing_example_in_tk.rb +28 -0
- data/lib/tk_paradise/examples/008_pig_latin_example.rb +70 -0
- data/lib/tk_paradise/examples/009_scrollbar_example.rb +44 -0
- data/lib/tk_paradise/examples/010_telnet_client.rb +106 -0
- data/lib/tk_paradise/examples/011_thermostat_example.rb +60 -0
- data/lib/tk_paradise/examples/012_tk_menu_example.rb +23 -0
- data/lib/tk_paradise/examples/013_tk_popup.rb +61 -0
- data/lib/tk_paradise/examples/014_tk_slider.rb +63 -0
- data/lib/tk_paradise/examples/015_choose_colour_example.rb +22 -0
- data/lib/tk_paradise/examples/016_spin_box_example.rb +28 -0
- data/lib/tk_paradise/examples/017_combo_box_example.rb +46 -0
- data/lib/tk_paradise/examples/018_tk_list_box_example.rb +18 -0
- data/lib/tk_paradise/examples/advanced/0001_example_showing_move_method.rb +32 -0
- data/lib/tk_paradise/tk_classes/root.rb +24 -0
- data/lib/tk_paradise/tk_paradise.rb +164 -0
- data/lib/tk_paradise/version/version.rb +19 -0
- data/lib/tk_paradise.rb +5 -0
- data/tk_paradise.gemspec +41 -0
- metadata +102 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
require 'tk'
|
6
|
+
|
7
|
+
# =========================================================================== #
|
8
|
+
# Demonstrates adding a vertical row of buttons to a scrolling canvas.
|
9
|
+
# =========================================================================== #
|
10
|
+
Tk.root.title('Test')
|
11
|
+
Tk.root.geometry('800x600+0+0')
|
12
|
+
|
13
|
+
canvas = TkCanvas.new(Tk.root) {
|
14
|
+
width 320
|
15
|
+
height 200
|
16
|
+
scrollregion '0 0 400 400'
|
17
|
+
pack(side: :left, fill: :both, expand: :true )
|
18
|
+
}
|
19
|
+
|
20
|
+
# =========================================================================== #
|
21
|
+
# Create the scrollbar next:
|
22
|
+
# =========================================================================== #
|
23
|
+
vbar = TkScrollbar.new(Tk.root) {
|
24
|
+
orient 'vert'
|
25
|
+
pack(side: :right, fill: :y)
|
26
|
+
}
|
27
|
+
|
28
|
+
canvas.yscrollbar(vbar)
|
29
|
+
|
30
|
+
frame = TkFrame.new(canvas) { |entry|
|
31
|
+
(1 .. 12).each { |i|
|
32
|
+
TkButton.new(entry) {
|
33
|
+
text i
|
34
|
+
command { Tk.bell }
|
35
|
+
grid
|
36
|
+
}
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
TkcLine.new(canvas, 0, 0, 400, 400)
|
41
|
+
TkcLine.new(canvas, 0, 400, 400, 0)
|
42
|
+
TkcWindow.new(canvas, 200, 200, width: 100, height: 280, window: frame)
|
43
|
+
|
44
|
+
Tk.mainloop
|
@@ -0,0 +1,106 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
require "tk"
|
6
|
+
|
7
|
+
def packing(padx, pady, side = "left", anchor = "n")
|
8
|
+
{ padx: padx, pady: pady, side: side, anchor: anchor }
|
9
|
+
end
|
10
|
+
|
11
|
+
root = TkRoot.new() { title "Telnet session" }
|
12
|
+
top = TkFrame.new(root)
|
13
|
+
fr1 = TkFrame.new(top)
|
14
|
+
fr1a = TkFrame.new(fr1)
|
15
|
+
fr1b = TkFrame.new(fr1)
|
16
|
+
fr2 = TkFrame.new(top)
|
17
|
+
fr3 = TkFrame.new(top)
|
18
|
+
fr4 = TkFrame.new(top)
|
19
|
+
|
20
|
+
LabelPack = packing(5, 5, "top", "w")
|
21
|
+
EntryPack = packing(5, 2, "top")
|
22
|
+
ButtonPack = packing(15, 5, "left", "center")
|
23
|
+
FramePack = packing(2, 2, "top")
|
24
|
+
Frame1Pack = packing(2, 2, "left")
|
25
|
+
|
26
|
+
var_host = TkVariable.new
|
27
|
+
var_port = TkVariable.new
|
28
|
+
var_user = TkVariable.new
|
29
|
+
var_pass = TkVariable.new
|
30
|
+
|
31
|
+
lab_host = TkLabel.new(fr1a) do
|
32
|
+
text "Host name"
|
33
|
+
pack LabelPack
|
34
|
+
end
|
35
|
+
|
36
|
+
ent_host = TkEntry.new(fr1a) do
|
37
|
+
textvariable var_host
|
38
|
+
font "{Helvetica} 10"
|
39
|
+
pack EntryPack
|
40
|
+
end
|
41
|
+
|
42
|
+
lab_port = TkLabel.new(fr1b) do
|
43
|
+
text "Port"
|
44
|
+
pack LabelPack
|
45
|
+
end
|
46
|
+
|
47
|
+
ent_port = TkEntry.new(fr1b) do
|
48
|
+
width 4
|
49
|
+
textvariable var_port
|
50
|
+
font "{Helvetica} 10"
|
51
|
+
pack EntryPack
|
52
|
+
end
|
53
|
+
|
54
|
+
lab_user = TkLabel.new(fr2) do
|
55
|
+
text "User name"
|
56
|
+
pack LabelPack
|
57
|
+
end
|
58
|
+
|
59
|
+
ent_user = TkEntry.new(fr2) do
|
60
|
+
width 21
|
61
|
+
font "{Helvetica} 12"
|
62
|
+
textvariable var_user
|
63
|
+
pack EntryPack
|
64
|
+
end
|
65
|
+
|
66
|
+
lab_pass = TkLabel.new(fr3) do
|
67
|
+
text "Password"
|
68
|
+
pack LabelPack
|
69
|
+
end
|
70
|
+
|
71
|
+
ent_pass = TkEntry.new(fr3) do
|
72
|
+
width 21
|
73
|
+
show "*"
|
74
|
+
textvariable var_pass
|
75
|
+
font "{Helvetica} 12"
|
76
|
+
pack EntryPack
|
77
|
+
end
|
78
|
+
|
79
|
+
btn_signon = TkButton.new(fr4) do
|
80
|
+
text "Sign on"
|
81
|
+
command {} # Does nothing!
|
82
|
+
pack ButtonPack
|
83
|
+
end
|
84
|
+
|
85
|
+
btn_cancel = TkButton.new(fr4) do
|
86
|
+
text "Cancel"
|
87
|
+
command { exit } # Just exits
|
88
|
+
pack ButtonPack
|
89
|
+
end
|
90
|
+
|
91
|
+
top.pack FramePack
|
92
|
+
fr1.pack FramePack
|
93
|
+
fr2.pack FramePack
|
94
|
+
fr3.pack FramePack
|
95
|
+
fr4.pack FramePack
|
96
|
+
fr1a.pack Frame1Pack
|
97
|
+
fr1b.pack Frame1Pack
|
98
|
+
|
99
|
+
var_host.value = "addison-wesley.com"
|
100
|
+
var_user.value = "debra"
|
101
|
+
var_port.value = 23
|
102
|
+
|
103
|
+
ent_pass.focus
|
104
|
+
foo = ent_user.font
|
105
|
+
|
106
|
+
Tk.mainloop
|
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
|
6
|
+
|
7
|
+
require 'tk'
|
8
|
+
|
9
|
+
# Common packing options...
|
10
|
+
top = { side: 'top', padx: 5, pady: 5 }
|
11
|
+
left = { side: 'left', padx: 5, pady: 5 }
|
12
|
+
bottom = { side: 'bottom', padx: 5, pady: 5 }
|
13
|
+
|
14
|
+
# Starting temperature...
|
15
|
+
temp = 74
|
16
|
+
|
17
|
+
root = TkRoot.new { title "Thermostat" }
|
18
|
+
tframe = TkFrame.new(root) { background "#606060" }
|
19
|
+
bframe = TkFrame.new(root)
|
20
|
+
|
21
|
+
tlab = TkLabel.new(tframe) do
|
22
|
+
text temp.to_s
|
23
|
+
font "{Helvetica} 54 {bold}"
|
24
|
+
foreground "green"
|
25
|
+
background "#606060"
|
26
|
+
pack left
|
27
|
+
end
|
28
|
+
|
29
|
+
# the "degree" symbol
|
30
|
+
TkLabel.new(tframe) do
|
31
|
+
text "o"
|
32
|
+
font "{Helvetica} 14 {bold}"
|
33
|
+
foreground "green"
|
34
|
+
background "#606060"
|
35
|
+
# Anchor-north above text like a degree symbol
|
36
|
+
pack left.update(anchor: 'n')
|
37
|
+
end
|
38
|
+
|
39
|
+
TkButton.new(bframe) do
|
40
|
+
text " Up "
|
41
|
+
pack left
|
42
|
+
command {
|
43
|
+
temp += 1
|
44
|
+
tlab.configure(text: temp.to_s)
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
TkButton.new(bframe) do
|
49
|
+
text "Down"
|
50
|
+
pack left
|
51
|
+
command {
|
52
|
+
temp -= 1
|
53
|
+
tlab.configure(text: temp.to_s)
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
tframe.pack top
|
58
|
+
bframe.pack bottom
|
59
|
+
|
60
|
+
Tk.mainloop
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'tk'
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
root = TkRoot.new() { title "Ruby/Tk Menu Example" }
|
6
|
+
|
7
|
+
bar = TkMenu.new()
|
8
|
+
|
9
|
+
sys = TkMenu.new(bar)
|
10
|
+
sys.add('command', 'label'=>"Quit", 'command'=>proc { root.destroy })
|
11
|
+
bar.add('cascade', 'menu'=>sys, 'label'=>"System")
|
12
|
+
|
13
|
+
file = TkMenu.new(bar)
|
14
|
+
file.add('command', 'label'=>"Open", 'command'=>proc { puts "Open..." })
|
15
|
+
file.add('command', 'label'=>"Close", 'command'=>proc { puts "Close..." })
|
16
|
+
bar.add('cascade', 'menu'=>file, 'label'=>"File")
|
17
|
+
|
18
|
+
root.menu(bar)
|
19
|
+
|
20
|
+
|
21
|
+
Tk.mainloop()
|
22
|
+
|
23
|
+
|
@@ -0,0 +1,61 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# tkpopup.rb : wrapper for tk_popup
|
6
|
+
# by Masahiro SATO (m@sa.to)
|
7
|
+
# Time-stamp: <99/08/14 10:49:28 msato>
|
8
|
+
# =========================================================================== #
|
9
|
+
require 'tk'
|
10
|
+
|
11
|
+
class TkPopup < TkWindow
|
12
|
+
|
13
|
+
# ========================================================================= #
|
14
|
+
# === initialize
|
15
|
+
# ========================================================================= #
|
16
|
+
def initialize(menu, x = 0, y = 0, entry = '')
|
17
|
+
super()
|
18
|
+
@menu = menu
|
19
|
+
@x = x
|
20
|
+
@y = y
|
21
|
+
@entry = entry
|
22
|
+
INTERP._eval('tk_popup '+
|
23
|
+
[@menu.path, @x.to_s, @y.to_s, @entry.to_s].join(' '))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
######################################################################
|
28
|
+
# example
|
29
|
+
# You will see a popup menu by clicking Button-3
|
30
|
+
######################################################################
|
31
|
+
if __FILE__ == $0
|
32
|
+
color_ar = %w( blue yellow green pink grey )
|
33
|
+
color = color_ar[0]
|
34
|
+
|
35
|
+
TkRoot.new {|r|
|
36
|
+
title File.basename($0)
|
37
|
+
button = TkButton.new(r,
|
38
|
+
'text' => 'Quit',
|
39
|
+
"background" => color,
|
40
|
+
"activebackground" => "light " + color,
|
41
|
+
"command" => proc {r.destroy}
|
42
|
+
).pack "fill"=>"both", "expand"=>"yes"
|
43
|
+
|
44
|
+
menu = TkMenu.new(button, 'tearoff' => false)
|
45
|
+
color_ar.each {|col|
|
46
|
+
menu.add("command",
|
47
|
+
"label" => col,
|
48
|
+
"command" => proc {
|
49
|
+
color = col
|
50
|
+
button.background color
|
51
|
+
button.activebackground 'light '+color
|
52
|
+
}
|
53
|
+
)
|
54
|
+
}
|
55
|
+
|
56
|
+
button.bind("Button-3", proc {|x, y|
|
57
|
+
TkPopup.new(menu, x, y, color_ar.index(color))
|
58
|
+
}, "%X %Y") # x_root and y_root
|
59
|
+
}
|
60
|
+
Tk.mainloop
|
61
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# This demonstration script creates a text widget that illustrates the
|
2
|
+
# various display styles that may be set for tags.
|
3
|
+
# Modified from the demo widget example provided in the Tcl release
|
4
|
+
require 'tk'
|
5
|
+
TITLE = 'Packing Example'
|
6
|
+
root = TkRoot.new() { title TITLE }
|
7
|
+
button = TkButton.new(root) {
|
8
|
+
text "First, rightmost"
|
9
|
+
}
|
10
|
+
button.pack("side"=>"right", "fill"=>'y')
|
11
|
+
entry = TkEntry.new(root).pack("side"=>"top", "fill"=>"x")
|
12
|
+
entry.insert(0, "Entry on the top")
|
13
|
+
label = TkLabel.new() { text 'to the right' }
|
14
|
+
label.pack("side"=>"right")
|
15
|
+
image = TkPhotoImage.new(
|
16
|
+
'file' => '/home/x/DATA/images/NJOY/Leeann_Tweeden.png',
|
17
|
+
'height' => 52
|
18
|
+
)
|
19
|
+
img_label = TkLabel.new(root) { image image }.pack("anchor"=>"e")
|
20
|
+
text = TkText.new(root) { width 20; height 5 }.pack("side"=>"left")
|
21
|
+
text.insert('end', "Left in canvas")
|
22
|
+
TkButton.new(root) {
|
23
|
+
index = 0
|
24
|
+
text 'Click Me'
|
25
|
+
command proc {
|
26
|
+
index += 1
|
27
|
+
puts 'Congratulations on creating ' +
|
28
|
+
'your '+verbose_number_to_word_position(index.to_s)+' Ruby/Tk' +
|
29
|
+
'application'}
|
30
|
+
}.pack('padx'=>15, 'pady'=>15)
|
31
|
+
#TkScrollbar.new(root)
|
32
|
+
TkMessage.new(root) { text "Message in the Bottom" }.pack("side"=>"bottom")
|
33
|
+
Tk.mainloop()
|
34
|
+
|
35
|
+
|
36
|
+
#text .t -yscrollcommand ".scroll set" -setgrid true \
|
37
|
+
# -width 40 -height 10 -wrap word
|
38
|
+
#scrollbar .scroll -command ".t yview"
|
39
|
+
#pack .scroll -side right -fill y
|
40
|
+
#pack .t -expand yes -fill both
|
41
|
+
#
|
42
|
+
# Set up the tags
|
43
|
+
#.t tag configure bold_italics -font \
|
44
|
+
# {-family courier -size 12 -weight bold -slant italic}
|
45
|
+
#.t tag configure big -font {-family helvetica -size 24 -weight bold}
|
46
|
+
#.t tag configure color1 -foreground red
|
47
|
+
#.t tag configure sunken -relief sunken -borderwidth 1
|
48
|
+
#.t tag bind Ouch <1> {.t insert end "Ouch! "}
|
49
|
+
#
|
50
|
+
# Now insert text that has the property of the tags
|
51
|
+
#.t insert end "Here are a few text styles.\n"
|
52
|
+
#.t insert end "1. Bold italic text.\n" bold_italics#
|
53
|
+
#.t insert end "2. Larger Helvetica text.\n" big
|
54
|
+
#.t insert end "3. Red text.\n" color1
|
55
|
+
#.t insert end "4. Sunken text.\n" sunken
|
56
|
+
#button .b -text "5. An embedded Hello Button" \
|
57
|
+
# -command {.t insert end "Hello "}
|
58
|
+
#.t window create end -window .b
|
59
|
+
#.t insert end "\n"
|
60
|
+
# .t insert end "6. Text with a binding (try clicking me)" Ouch
|
61
|
+
#.t insert end "\nAnd all this is editable!"
|
62
|
+
|
63
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
require 'tk'
|
6
|
+
|
7
|
+
root = TkRoot.new
|
8
|
+
root.title = 'Window'
|
9
|
+
root.geometry('800x600+0+0')
|
10
|
+
|
11
|
+
button_click = Proc.new {
|
12
|
+
Tk.chooseColor
|
13
|
+
}
|
14
|
+
|
15
|
+
button = TkButton.new(root) {
|
16
|
+
text 'button'
|
17
|
+
pack(side: :left, padx: "50", pady: "50")
|
18
|
+
}
|
19
|
+
|
20
|
+
button.command = button_click
|
21
|
+
|
22
|
+
Tk.mainloop
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
require 'tk'
|
6
|
+
|
7
|
+
alias e puts
|
8
|
+
|
9
|
+
root = TkRoot.new
|
10
|
+
root.title = 'Window'
|
11
|
+
root.geometry('800x600+0+0')
|
12
|
+
|
13
|
+
@spin_box_variable = TkVariable.new
|
14
|
+
@spin_box = TkSpinbox.new(root) {
|
15
|
+
from 0
|
16
|
+
to 100
|
17
|
+
increment 5
|
18
|
+
justify :center
|
19
|
+
textvariable @spin_box_variable
|
20
|
+
command proc { callback }
|
21
|
+
pack(side: 'left', padx: '50', pady: '50')
|
22
|
+
}
|
23
|
+
def callback
|
24
|
+
e 'The value has changed.'
|
25
|
+
e @spin_box_variable.get
|
26
|
+
end
|
27
|
+
|
28
|
+
Tk.mainloop
|
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
require 'tk'
|
6
|
+
|
7
|
+
alias e puts
|
8
|
+
|
9
|
+
root = TkRoot.new
|
10
|
+
root.title = 'Combo Box Example'
|
11
|
+
root.geometry('700x550+0+0')
|
12
|
+
|
13
|
+
MONOSPACED_FONT = TkFont.new(family: 'Hack', size: 22, weight: 'bold')
|
14
|
+
|
15
|
+
# =========================================================================== #
|
16
|
+
# label text for title
|
17
|
+
# =========================================================================== #
|
18
|
+
TkLabel.new(root,
|
19
|
+
text: 'Combobox Widget',
|
20
|
+
background: 'green',
|
21
|
+
foreground: 'white',
|
22
|
+
font: MONOSPACED_FONT
|
23
|
+
).grid(row: 0, column: 0)
|
24
|
+
|
25
|
+
TkLabel.new(root,
|
26
|
+
text: 'Select the month:',
|
27
|
+
font: MONOSPACED_FONT
|
28
|
+
).grid(column: 0, row: 5, padx: 10, pady: 25)
|
29
|
+
|
30
|
+
# =========================================================================== #
|
31
|
+
# Combobox creation:
|
32
|
+
# =========================================================================== #
|
33
|
+
n = TkVariable.new
|
34
|
+
combo_box = TkCombobox.new(
|
35
|
+
root,
|
36
|
+
width: 30,
|
37
|
+
font: MONOSPACED_FONT,
|
38
|
+
textvariable: n
|
39
|
+
)
|
40
|
+
combo_box.values(%w(
|
41
|
+
aa bb cc dd ee ff gg hh ii jj kk ll mm nn oo pp qq rr ss tt uu
|
42
|
+
))
|
43
|
+
combo_box.grid(column: 0, row: 6)
|
44
|
+
combo_box.current = 3
|
45
|
+
|
46
|
+
Tk.mainloop
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'tk'
|
2
|
+
|
3
|
+
root = TkRoot.new
|
4
|
+
root.title = "Window"
|
5
|
+
root.geometry('700x400+0+0')
|
6
|
+
list = TkListbox.new(root) {
|
7
|
+
width 10
|
8
|
+
height 10
|
9
|
+
setgrid 1
|
10
|
+
selectmode 'multiple'
|
11
|
+
pack('fill' => 'x')
|
12
|
+
}
|
13
|
+
|
14
|
+
list.insert 0, "yellow", "gray", "green",
|
15
|
+
"blue", "red", "black", "white", "cyan",
|
16
|
+
"pink", "yellow", "orange", "gray"
|
17
|
+
|
18
|
+
Tk.mainloop
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
require 'tk_paradise'
|
6
|
+
|
7
|
+
alias e puts
|
8
|
+
|
9
|
+
@window = Tk.root
|
10
|
+
@window.title = 'Window'
|
11
|
+
@window.move(0, 0)
|
12
|
+
USE_THIS_FONT = TkFont.new(family: 'Helvetica', size: 20, weight: 'bold')
|
13
|
+
|
14
|
+
# =========================================================================== #
|
15
|
+
# === on_button1_clicked
|
16
|
+
# =========================================================================== #
|
17
|
+
def on_button1_clicked
|
18
|
+
result = Tk.choose_colour # The result may be like this: "#d9845b"
|
19
|
+
@window.configure(background: result)
|
20
|
+
return result
|
21
|
+
end
|
22
|
+
|
23
|
+
proc_on_button_clicked = Proc.new { on_button1_clicked }
|
24
|
+
|
25
|
+
button = TkButton.new(@window) {
|
26
|
+
text 'button: choose a colour'
|
27
|
+
font USE_THIS_FONT
|
28
|
+
pack(side: :left, padx: "50", pady: "50")
|
29
|
+
}
|
30
|
+
button.command = proc_on_button_clicked
|
31
|
+
|
32
|
+
Tk.run
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'tk_paradise/tk_classes/root.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
module Tk
|
8
|
+
|
9
|
+
class Root
|
10
|
+
|
11
|
+
# ========================================================================= #
|
12
|
+
# === move
|
13
|
+
#
|
14
|
+
# This will re-position the tk-root widget to the specified position,
|
15
|
+
# similar to how ruby-gtk works.
|
16
|
+
# ========================================================================= #
|
17
|
+
def move(
|
18
|
+
x = 0,
|
19
|
+
y = 0
|
20
|
+
)
|
21
|
+
root.geometry("+#{x}+#{y}") # This will only specify the x and y coordinates
|
22
|
+
end
|
23
|
+
|
24
|
+
end; end
|
@@ -0,0 +1,164 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'tk_paradise/tk_paradise.rb'
|
6
|
+
# include Tk
|
7
|
+
# =========================================================================== #
|
8
|
+
require 'tk'
|
9
|
+
|
10
|
+
module Tk
|
11
|
+
|
12
|
+
alias choose_colour chooseColor # === choose_colour
|
13
|
+
|
14
|
+
# ========================================================================= #
|
15
|
+
# Provide some "aliases".
|
16
|
+
# ========================================================================= #
|
17
|
+
Grid = TkGrid
|
18
|
+
Font = TkFont
|
19
|
+
# ========================================================================= #
|
20
|
+
# Button = TkButton
|
21
|
+
# Note that the tk-gem already defines Button.
|
22
|
+
# ========================================================================= #
|
23
|
+
|
24
|
+
# ========================================================================= #
|
25
|
+
# === e
|
26
|
+
# ========================================================================= #
|
27
|
+
def e(i = '')
|
28
|
+
puts i
|
29
|
+
end
|
30
|
+
|
31
|
+
# ========================================================================= #
|
32
|
+
# === Tk.run
|
33
|
+
# ========================================================================= #
|
34
|
+
def self.run
|
35
|
+
::Tk.mainloop
|
36
|
+
end
|
37
|
+
|
38
|
+
# ========================================================================= #
|
39
|
+
# === Tk.root
|
40
|
+
# ========================================================================= #
|
41
|
+
def self.root(hash = {}, &block)
|
42
|
+
root = TkRoot.new { hash }
|
43
|
+
if block_given?
|
44
|
+
yielded = yield
|
45
|
+
if yielded.is_a? Hash
|
46
|
+
# =================================================================== #
|
47
|
+
# === :geometry
|
48
|
+
# =================================================================== #
|
49
|
+
if yielded.has_key? :geometry
|
50
|
+
root.geometry(yielded[:geometry])
|
51
|
+
end
|
52
|
+
# =================================================================== #
|
53
|
+
# === :title
|
54
|
+
# =================================================================== #
|
55
|
+
if yielded.has_key? :title
|
56
|
+
root.title = yielded[:title]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
return root
|
61
|
+
end
|
62
|
+
|
63
|
+
# ========================================================================= #
|
64
|
+
# === tk_label
|
65
|
+
#
|
66
|
+
# The second argument should be the root-widget.
|
67
|
+
#
|
68
|
+
# Usage example:
|
69
|
+
#
|
70
|
+
# tk_label('Message in the Bottom', root) { :on_bottom }
|
71
|
+
#
|
72
|
+
# ========================================================================= #
|
73
|
+
def tk_label(
|
74
|
+
text_to_use = '',
|
75
|
+
root_widget = nil,
|
76
|
+
font = nil # fontStyle = tkFont.Font(family="Lucida Grande", size=20)
|
77
|
+
)
|
78
|
+
pack_onto_this_side = 'bottom'
|
79
|
+
# ======================================================================= #
|
80
|
+
# === Handle blocks next
|
81
|
+
# ======================================================================= #
|
82
|
+
if block_given?
|
83
|
+
yielded = yield
|
84
|
+
case yielded # case tag
|
85
|
+
# ===================================================================== #
|
86
|
+
# === :on_bottom
|
87
|
+
# ===================================================================== #
|
88
|
+
when :on_bottom
|
89
|
+
pack_onto_this_side = 'bottom'
|
90
|
+
# ===================================================================== #
|
91
|
+
# === :on_right
|
92
|
+
# ===================================================================== #
|
93
|
+
when :on_right
|
94
|
+
pack_onto_this_side = 'right'
|
95
|
+
end
|
96
|
+
end
|
97
|
+
::TkMessage.new(root_widget) {
|
98
|
+
text(text_to_use)
|
99
|
+
}.pack('side' => pack_onto_this_side)
|
100
|
+
end; alias label tk_label # === label
|
101
|
+
|
102
|
+
# ========================================================================= #
|
103
|
+
# === tk_image
|
104
|
+
#
|
105
|
+
# Usage examples:
|
106
|
+
#
|
107
|
+
# - create an empty image of 300x200 pixels:
|
108
|
+
#
|
109
|
+
# image = TkPhotoImage.new(height: 200, width: 300)
|
110
|
+
#
|
111
|
+
# - create an image from a file:
|
112
|
+
#
|
113
|
+
# image = TkPhotoImage.new(file: 'my_image.gif')
|
114
|
+
#
|
115
|
+
# ========================================================================= #
|
116
|
+
def tk_image(
|
117
|
+
path_to_the_image,
|
118
|
+
extra_arguments = { height: 50 }
|
119
|
+
)
|
120
|
+
hash = {}
|
121
|
+
hash['file'] = path_to_the_image
|
122
|
+
hash.merge(extra_arguments)
|
123
|
+
return ::TkPhotoImage.new(hash)
|
124
|
+
end; alias image tk_image # === image
|
125
|
+
|
126
|
+
# ========================================================================= #
|
127
|
+
# === tk_button
|
128
|
+
# ========================================================================= #
|
129
|
+
# def tk_button
|
130
|
+
# end; alias button tk_button # === button
|
131
|
+
|
132
|
+
class Button
|
133
|
+
|
134
|
+
# ======================================================================= #
|
135
|
+
# === set_font
|
136
|
+
# ======================================================================= #
|
137
|
+
def set_font(i)
|
138
|
+
self['font'] = i
|
139
|
+
end
|
140
|
+
|
141
|
+
end
|
142
|
+
|
143
|
+
class TkLabel
|
144
|
+
|
145
|
+
# ======================================================================= #
|
146
|
+
# === set_text
|
147
|
+
# ======================================================================= #
|
148
|
+
def set_text(i)
|
149
|
+
configure(text: i)
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
# create button
|
155
|
+
# button = Button(gui, text='My Button', bg='#0052cc', fg='#ffffff')
|
156
|
+
# # apply font to the button label
|
157
|
+
# button['font'] = myFont
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
# =========================================================================== #
|
162
|
+
# Next, require some addons - modifications of core-tk classes.
|
163
|
+
# =========================================================================== #
|
164
|
+
require 'tk_paradise/tk_classes/root.rb'
|