tk_paradise 0.0.11
Sign up to get free protection for your applications and to get access to all the features.
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
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 57e4a8df5ba60f4d91f8ca5ca47e5479a291f6234be90a1396f4e4b29c1712b3
|
4
|
+
data.tar.gz: eb0d691e920529f48a61ec739b1f63ca89e8b5adfb0518aaed788d45734c784d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 30453d6c0479e4b51ca533e4b00c440eab792b01eb760545faf081bb1d00fd2fa6499508c8f84f6fb2fc216de6bc92cc84315af795e4129e68e2c94ecca17b62
|
7
|
+
data.tar.gz: 055f4da45f19d7d51bc5a39c2b0f20ff090b33ec7e75d686540e26b8259b241c6e386ba196b9d61f09b1681a8101c2bead8e2157a35532a8ec4ff340af5f8e28
|
data/doc/HINTS.md
ADDED
@@ -0,0 +1,318 @@
|
|
1
|
+
ADD_RUBY_BADGE
|
2
|
+
ADD_TIME_STAMP
|
3
|
+
|
4
|
+
Specify width, height, then x-coordinate, then y-coordinate:
|
5
|
+
|
6
|
+
root.geometry('800x600+0+0')
|
7
|
+
root.geometry('250x150+0+0')
|
8
|
+
root.geometry("500x100") # Just width x height
|
9
|
+
root.geometry("800x500") # Just width x height
|
10
|
+
root.geometry("+300+300") # And this will only specify the x and y coordinates
|
11
|
+
|
12
|
+
Create a new root entry:
|
13
|
+
|
14
|
+
TITLE = 'This is my widget'
|
15
|
+
root = TkRoot.new { title TITLE }
|
16
|
+
|
17
|
+
Set the title of the root widget at a later point:
|
18
|
+
|
19
|
+
root.title('YO')
|
20
|
+
|
21
|
+
Set a minimal size of the root widget:
|
22
|
+
|
23
|
+
root.minsize(400, 200)
|
24
|
+
|
25
|
+
Make the root window invisible (so that e. g. only the menubar shows up):
|
26
|
+
|
27
|
+
root.withdraw
|
28
|
+
|
29
|
+
Disallow the root window from being resized:
|
30
|
+
|
31
|
+
Tk.root.resizable(false, false) # boolean value: (width, height)
|
32
|
+
|
33
|
+
Obtain the value of an entry:
|
34
|
+
|
35
|
+
use .get
|
36
|
+
|
37
|
+
Delete the content of an entry:
|
38
|
+
|
39
|
+
entry.delete(0,'end') # Weird that 'end' is used there.
|
40
|
+
|
41
|
+
Set the value of an entry:
|
42
|
+
|
43
|
+
entry.insert(0, _)
|
44
|
+
|
45
|
+
# Note that I was unable to get this to work: entry.configure(text: 'Hey there')
|
46
|
+
|
47
|
+
Create an entry (entry tag):
|
48
|
+
|
49
|
+
@entry1 = TkEntry.new(outermost_frame, textvariable: @text1) {
|
50
|
+
font(MAIN_FONT)
|
51
|
+
}
|
52
|
+
|
53
|
+
Set the width of an entry:
|
54
|
+
|
55
|
+
entry.configure(width: 35) # Oddly enough I have no idea what this number stands for.
|
56
|
+
|
57
|
+
Set the background colour of an entry:
|
58
|
+
|
59
|
+
background 'steelblue'
|
60
|
+
root.configure(background: 'black')
|
61
|
+
|
62
|
+
Respond to key-events for entry:
|
63
|
+
|
64
|
+
entry.bind('Key', proc {|this_key|
|
65
|
+
e "This key was pressed: `#{this_key}`"
|
66
|
+
}, '%K')
|
67
|
+
|
68
|
+
Change an entry dynamically:
|
69
|
+
|
70
|
+
label = TkLabel.new(top) {
|
71
|
+
text 'Hello, World!'
|
72
|
+
}
|
73
|
+
TkButton.new(top) {
|
74
|
+
text "Cancel"
|
75
|
+
command proc {
|
76
|
+
label.configure('text'=>"Goodbye, Cruel World!")
|
77
|
+
}
|
78
|
+
pack('side'=>'right', 'padx'=>10, 'pady'=>10)
|
79
|
+
}
|
80
|
+
|
81
|
+
Now when the Cancel button is pressed, the text in the label
|
82
|
+
will change immediately from ``Hello, World!'' to ``Goodbye,
|
83
|
+
Cruel World!''
|
84
|
+
|
85
|
+
Create buttons:
|
86
|
+
|
87
|
+
Button.new(root, text: 'two')
|
88
|
+
TkButton.new(root, text: entry)
|
89
|
+
TkButton.new(root, text: 'is').grid("columnspan"=>3, "sticky"=>"ew")
|
90
|
+
TkButton.new(root, text: 'two').grid("row"=>1, "column"=>3, "columnspan"=>3)
|
91
|
+
|
92
|
+
Button is-clicked event (clicked callback):
|
93
|
+
|
94
|
+
command proc {
|
95
|
+
e 'Hello.'
|
96
|
+
}
|
97
|
+
|
98
|
+
Add the button to the main root:
|
99
|
+
|
100
|
+
button.pack
|
101
|
+
|
102
|
+
Create a new grid:
|
103
|
+
|
104
|
+
TkGrid.grid(buttons[0], buttons[1], buttons[2], columnspan: 2 )
|
105
|
+
|
106
|
+
Start the mainloop:
|
107
|
+
|
108
|
+
Tk.mainloop
|
109
|
+
Tk.run # Or this variant when the tk_paradise gem is used.
|
110
|
+
|
111
|
+
Specify font size:
|
112
|
+
|
113
|
+
root.option_add('*Font', '25')
|
114
|
+
|
115
|
+
Return the available fonts:
|
116
|
+
|
117
|
+
pp TkFont.names
|
118
|
+
# ["TkCaptionFont", "TkSmallCaptionFont", "TkTooltipFont",
|
119
|
+
# "TkFixedFont", "TkHeadingFont", "TkMenuFont", "TkIconFont",
|
120
|
+
# "TkTextFont", "TkDefaultFont"]
|
121
|
+
|
122
|
+
1 TkDefaultFont: The default for all GUI items not otherwise specified.
|
123
|
+
2 TkTextFont: Used for entry widgets, listboxes, etc.
|
124
|
+
3 TkFixedFont: A standard fixed-width font.
|
125
|
+
4 TkMenuFont: The font used for menu items.
|
126
|
+
5 TkHeadingFont: The font typically used for column headings in lists and tables.
|
127
|
+
6 TkCaptionFont: A font for window and dialog caption bars.
|
128
|
+
7 TkSmallCaptionFont: A smaller caption font for subwindows or tool dialogs
|
129
|
+
8 TkIconFont: A font for icon captions.
|
130
|
+
9 TkTooltipFont: A font for tooltips.
|
131
|
+
|
132
|
+
Specify a font to use (font tag):
|
133
|
+
|
134
|
+
font = TkFont.new(family: 'Helvetica', size: 20, weight: 'bold')
|
135
|
+
TkLabel.new(root) { text 'Attention!'; font TkCaptionFont }
|
136
|
+
|
137
|
+
MONOSPACED_FONT = TkFont.new(family: 'Hack', size: 22, weight: 'bold')
|
138
|
+
|
139
|
+
Create a new tk-variable:
|
140
|
+
|
141
|
+
text1 = TkVariable.new
|
142
|
+
|
143
|
+
Note that TkVariable implements #to_a, which can be used to convert
|
144
|
+
its value into an Array.
|
145
|
+
|
146
|
+
How to create a label (text):
|
147
|
+
|
148
|
+
label = TkLabel.new(root) {
|
149
|
+
textvariable
|
150
|
+
borderwidth 5
|
151
|
+
font use_this_font
|
152
|
+
foreground 'red' # The foreground colour to use.
|
153
|
+
relief 'groove'
|
154
|
+
pack(side: 'right', padx: '50', pady: '50')
|
155
|
+
}
|
156
|
+
|
157
|
+
Draw on a canvas:
|
158
|
+
|
159
|
+
canvas = TkCanvas.new(root)
|
160
|
+
|
161
|
+
Multiple spanning in a grid:
|
162
|
+
|
163
|
+
.grid(row: 1, column: 3, columnspan: 3)
|
164
|
+
|
165
|
+
How to let the button perform an action:
|
166
|
+
|
167
|
+
button = Button.new(root, text: 'foobar) {
|
168
|
+
command proc {
|
169
|
+
puts 'I am saying '+::Colours.sfancy('hello world')+'!'
|
170
|
+
}
|
171
|
+
}
|
172
|
+
|
173
|
+
Padding in tk:
|
174
|
+
|
175
|
+
Use padx and pady for a grid. Example:
|
176
|
+
|
177
|
+
.grid(row: 1, column: 3, columnspan: 3, padx: 5, pady: 5)
|
178
|
+
|
179
|
+
Pack a tk-label:
|
180
|
+
|
181
|
+
TkLabel.new(root) {
|
182
|
+
text 'Hello, World!'
|
183
|
+
pack { padx 25 ; pady 25; side 'left' }
|
184
|
+
}
|
185
|
+
|
186
|
+
Make use of a scrollbar (scrollbar tag):
|
187
|
+
|
188
|
+
scrollbar = TkScrollbar.new(root).pack(side: :right, fill: :y)
|
189
|
+
|
190
|
+
command proc{|idx|
|
191
|
+
list.yview *idx
|
192
|
+
}
|
193
|
+
|
194
|
+
Combo box widget:
|
195
|
+
|
196
|
+
list = TkListbox.new(frame).pack
|
197
|
+
list.insert("end", "/home")
|
198
|
+
list.insert("end", "/etc/hosts")
|
199
|
+
|
200
|
+
Or alternatively:
|
201
|
+
n = TkVariable.new
|
202
|
+
combo_box = TkCombobox.new(
|
203
|
+
root,
|
204
|
+
width: 30,
|
205
|
+
font: MONOSPACED_FONT,
|
206
|
+
textvariable: n
|
207
|
+
)
|
208
|
+
combo_box.values(%w(
|
209
|
+
aa bb cc dd ee ff gg hh ii jj kk ll mm nn oo pp qq rr ss tt uu
|
210
|
+
))
|
211
|
+
combo_box.grid(column: 0, row: 6)
|
212
|
+
|
213
|
+
How to select the current value of such a combo-box:
|
214
|
+
|
215
|
+
combo_box.current = 3 # This uses the fourth element.
|
216
|
+
|
217
|
+
Query / Obtain values:
|
218
|
+
|
219
|
+
This is done via the method .cget().
|
220
|
+
|
221
|
+
b.cget('text') # "OK"
|
222
|
+
b.cget('justify') # "left"
|
223
|
+
b.cget('border') # 5
|
224
|
+
|
225
|
+
Events in ruby-tk in general need to make use of .bind, in order
|
226
|
+
to tie an event to a widget.
|
227
|
+
|
228
|
+
mouse-over event:
|
229
|
+
|
230
|
+
image1 = TkPhotoImage.new { file "img1.gif" }
|
231
|
+
b = TkButton.new(@root) {
|
232
|
+
image image1
|
233
|
+
command proc { doit }
|
234
|
+
}
|
235
|
+
b.bind("Enter") { b.configure(image: image2) }
|
236
|
+
b.bind("Leave") { b.configure(image: image1) }
|
237
|
+
|
238
|
+
The configure method (configure tag):
|
239
|
+
|
240
|
+
Every widget in tk supports the .configure() method.
|
241
|
+
button.configure(text: "Goodbye, Cruel World!")
|
242
|
+
|
243
|
+
Creating images (image tag, img tag):
|
244
|
+
|
245
|
+
image = TkPhotoImage.new(file: 'foobar.png', height: 82)
|
246
|
+
|
247
|
+
Create some text:
|
248
|
+
|
249
|
+
text = TkText.new(root) { width 20; height 5 }.pack(side: :left)
|
250
|
+
|
251
|
+
Append onto the text-widget:
|
252
|
+
|
253
|
+
text.insert('end', 'Left in canvas')
|
254
|
+
|
255
|
+
Create a frame:
|
256
|
+
|
257
|
+
frame = TkFrame(root, highlightbackground: "black",
|
258
|
+
highlightthickness: 2,
|
259
|
+
bd: 0)
|
260
|
+
Add a button to that frame:
|
261
|
+
|
262
|
+
button = TkButton(frame, text: 'Submit', fg: 'black',
|
263
|
+
bg: 'yellow', font: (("Times New Roman"),15))
|
264
|
+
|
265
|
+
bttn.pack()
|
266
|
+
|
267
|
+
Set the width of a border around a button:
|
268
|
+
|
269
|
+
borderwidth 3
|
270
|
+
|
271
|
+
Set the style of a border:
|
272
|
+
|
273
|
+
Possible values include:
|
274
|
+
|
275
|
+
flat
|
276
|
+
|
277
|
+
Use it like this:
|
278
|
+
|
279
|
+
relief 'flat'
|
280
|
+
relief 'ridge'
|
281
|
+
relief 'sunken'
|
282
|
+
|
283
|
+
How to use TkMessage:
|
284
|
+
|
285
|
+
TkMessage.new(root) {
|
286
|
+
|
287
|
+
Start in the top left corner:
|
288
|
+
|
289
|
+
root.geometry('250x150+0+0')
|
290
|
+
|
291
|
+
How to use an open-file dialog:
|
292
|
+
|
293
|
+
Tk.getOpenFile
|
294
|
+
|
295
|
+
How to create a spin-button in ruby-tk (also called a spin-box):
|
296
|
+
|
297
|
+
TkSpinbox.new(root) {
|
298
|
+
...Standard Options...
|
299
|
+
...Widget-specific Options...
|
300
|
+
}
|
301
|
+
|
302
|
+
Such as:
|
303
|
+
|
304
|
+
TkSpinbox.new(root) {
|
305
|
+
to 250
|
306
|
+
from 0
|
307
|
+
increment 5
|
308
|
+
pack(side: 'left', padx: '50', pady: '50')
|
309
|
+
}
|
310
|
+
|
311
|
+
To center it, use:
|
312
|
+
|
313
|
+
justify :center
|
314
|
+
|
315
|
+
Useful links:
|
316
|
+
|
317
|
+
https://tkdocs.com/tutorial/text.html
|
318
|
+
https://www.tutorialspoint.com/ruby/ruby_tk_dialogbox.htm
|
@@ -0,0 +1,63 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
# require 'tk_paradise/base/base.rb'
|
6
|
+
# =========================================================================== #
|
7
|
+
module Tk
|
8
|
+
|
9
|
+
class Base # === Tk::Base
|
10
|
+
|
11
|
+
require 'colours'
|
12
|
+
include Colours
|
13
|
+
|
14
|
+
# ========================================================================= #
|
15
|
+
# === initialize
|
16
|
+
# ========================================================================= #
|
17
|
+
def initialize(
|
18
|
+
i = ARGV
|
19
|
+
)
|
20
|
+
set_commandline_arguments(i)
|
21
|
+
reset
|
22
|
+
end
|
23
|
+
|
24
|
+
# ========================================================================= #
|
25
|
+
# === reset (reset tag)
|
26
|
+
# ========================================================================= #
|
27
|
+
def reset
|
28
|
+
# ======================================================================= #
|
29
|
+
# === @internal_hash
|
30
|
+
# ======================================================================= #
|
31
|
+
@internal_hash = {}
|
32
|
+
end
|
33
|
+
|
34
|
+
# ========================================================================= #
|
35
|
+
# === set_commandline_arguments
|
36
|
+
# ========================================================================= #
|
37
|
+
def set_commandline_arguments(i = '')
|
38
|
+
i = [i].flatten.compact
|
39
|
+
@commandline_arguments = i
|
40
|
+
end
|
41
|
+
|
42
|
+
# ========================================================================= #
|
43
|
+
# === commandline_arguments?
|
44
|
+
# ========================================================================= #
|
45
|
+
def commandline_arguments?
|
46
|
+
@commandline_arguments
|
47
|
+
end
|
48
|
+
|
49
|
+
# ========================================================================= #
|
50
|
+
# === first_argument?
|
51
|
+
# ========================================================================= #
|
52
|
+
def first_argument?
|
53
|
+
@commandline_arguments.first
|
54
|
+
end; alias first? first_argument? # === first?
|
55
|
+
|
56
|
+
# ========================================================================= #
|
57
|
+
# === tk_variable
|
58
|
+
# ========================================================================= #
|
59
|
+
def tk_variable
|
60
|
+
TkVariable.new
|
61
|
+
end
|
62
|
+
|
63
|
+
end; end
|
@@ -0,0 +1,21 @@
|
|
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
|
+
button_click = Proc.new {
|
11
|
+
Tk.getOpenFile
|
12
|
+
}
|
13
|
+
|
14
|
+
button = TkButton.new(root) {
|
15
|
+
text 'button'
|
16
|
+
pack(side: :left, padx: "50", pady: "50")
|
17
|
+
}
|
18
|
+
|
19
|
+
button.command = button_click
|
20
|
+
|
21
|
+
Tk.mainloop
|
@@ -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 { title 'Click to draw a tiny box' }
|
8
|
+
TkLabel.new(root) { text 'Attention!'; font TkCaptionFont }
|
9
|
+
canvas = TkCanvas.new(root)
|
10
|
+
canvas.pack
|
11
|
+
canvas.bind('1', proc { |e|
|
12
|
+
p "#{e.x}, #{e.y}"
|
13
|
+
TkcRectangle.new(canvas, e.x,e.y,e.x-5, e.y-5)
|
14
|
+
})
|
15
|
+
root.bind('Any-Key-d',
|
16
|
+
proc { |event|
|
17
|
+
p "#{event.x}, #{event.y}"
|
18
|
+
TkcRectangle.new(canvas, event.x, event.y, event.x-5, event.y-5)
|
19
|
+
}
|
20
|
+
)
|
21
|
+
Tk.mainloop
|
22
|
+
# rb draw_tiny_box.rb
|
@@ -0,0 +1,82 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
require 'tk'
|
6
|
+
root = TkRoot.new { title 'Fun with Cursors'}
|
7
|
+
# =========================================================================== #
|
8
|
+
# Specify the Root Geometry
|
9
|
+
# =========================================================================== #
|
10
|
+
root.geometry '1250x1000+0+0'
|
11
|
+
|
12
|
+
TkMessage.new(root) { x='bottom_side';text x;background 'green';cursor x}.pack('side'=>'right', padx: 4, 'padx'=>2)
|
13
|
+
TkMessage.new(root) { x='bottom_side';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
14
|
+
TkMessage.new(root) { x='box_spiral';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
15
|
+
TkMessage.new(root) { x='center_ptr';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
16
|
+
TkMessage.new(root) { x='circle';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
17
|
+
TkMessage.new(root) { x='clock';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
18
|
+
TkMessage.new(root) { x='coffee_mug';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
19
|
+
TkMessage.new(root) { x='cross';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
20
|
+
TkMessage.new(root) { x='cross_reverse';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
21
|
+
TkMessage.new(root) { x='crosshair';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
22
|
+
TkMessage.new(root) { x='diamond_cross';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
23
|
+
TkMessage.new(root) { x='dot';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
24
|
+
TkMessage.new(root) { x='dotbox';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
25
|
+
TkMessage.new(root) { x='double_arrow';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
26
|
+
TkMessage.new(root) { x='draft_large';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
27
|
+
TkMessage.new(root) { x='draft_small';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
28
|
+
TkMessage.new(root) { x='draped_box';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
29
|
+
TkMessage.new(root) { x='exchange';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
30
|
+
TkMessage.new(root) { x='bottom_side';text x;background 'green';cursor x}.pack('side'=>'right', padx: 4, 'padx'=>2)
|
31
|
+
TkMessage.new(root) { x='bottom_side';text x;background 'green';cursor x}.pack('side'=>'right', padx: 4, 'padx'=>2)
|
32
|
+
TkMessage.new(root) { x='bottom_side';text x;background 'green';cursor x}.pack('side'=>'right', padx: 4, 'padx'=>2)
|
33
|
+
TkMessage.new(root) { x='bottom_side';text x;background 'green';cursor x}.pack('side'=>'right', padx: 4, 'padx'=>2)
|
34
|
+
TkMessage.new(root) { x='hand2';text x;background 'green';cursor x}.pack('side'=>'right', padx: 4, 'padx'=>2)
|
35
|
+
TkMessage.new(root) { x='heart';text x;background 'green';cursor x}.pack('side'=>'right', padx: 4, 'padx'=>2)
|
36
|
+
TkMessage.new(root) { x='icon';text x;background 'green';cursor x}.pack('side'=>'right', padx: 4, 'padx'=>2)
|
37
|
+
TkMessage.new(root) { x='iron_cross';text x;background 'green';cursor x}.pack('side'=>'right', padx: 4, 'padx'=>2)
|
38
|
+
TkMessage.new(root) { x='left_ptr';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
39
|
+
TkMessage.new(root) { x='left_side';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
40
|
+
TkMessage.new(root) { x='left_tee';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
41
|
+
TkMessage.new(root) { x='leftbutton';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
42
|
+
TkMessage.new(root) { x='ll_angle';text x;background 'green';cursor x}.pack('side'=>'right', padx: 4, 'padx'=>2)
|
43
|
+
TkMessage.new(root) { x='lr_angle';text x;background 'green';cursor x}.pack('side'=>'right', padx: 4, 'padx'=>2)
|
44
|
+
TkMessage.new(root) { x='man';text x;background 'green';cursor x}.pack('side'=>'right', padx: 4, 'padx'=>2)
|
45
|
+
TkMessage.new(root) { x='middlebutton';text x;background 'green';cursor x}.pack('side'=>'right', padx: 4, 'padx'=>2)
|
46
|
+
TkMessage.new(root) { x='mouse';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
47
|
+
TkMessage.new(root) { x='pencil';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
48
|
+
TkMessage.new(root) { x='pirate';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
49
|
+
TkMessage.new(root) { x='plus';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
50
|
+
TkMessage.new(root) { x='question_arrow';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
51
|
+
TkMessage.new(root) { x='right_ptr';text x;background 'green';cursor x}.pack('side'=>'bottom', padx: 4, 'padx'=>2)
|
52
|
+
TkMessage.new(root) { x='right_side';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
53
|
+
TkMessage.new(root) { x='right_tee';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
54
|
+
TkMessage.new(root) { x='rightbutton';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
55
|
+
TkMessage.new(root) { x='rtl_logo';text x;background 'green';cursor x}.pack('side'=>'bottom', padx: 4, 'padx'=>2)
|
56
|
+
TkMessage.new(root) { x='sailboat';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
57
|
+
TkMessage.new(root) { x='sb_down_arrow';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
58
|
+
TkMessage.new(root) { x='sb_h_double_arrow';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
59
|
+
TkMessage.new(root) { x='sb_left_arrow';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
60
|
+
TkMessage.new(root) { x='sb_right_arrow';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
61
|
+
TkMessage.new(root) { x='sb_up_arrow';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
62
|
+
TkMessage.new(root) { x='sb_v_double_arrow';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
63
|
+
TkMessage.new(root) { x='shuttle';text x;background 'green';cursor x}.pack('side'=>'top', padx: 4, 'padx'=>2)
|
64
|
+
TkMessage.new(root) { x='sizing';text x;background 'green';cursor x}.pack('side'=>'right', padx: 4, 'padx'=>2)
|
65
|
+
TkMessage.new(root) { x='spider';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
66
|
+
TkMessage.new(root) { x='spraycan';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
67
|
+
TkMessage.new(root) { x='star';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
68
|
+
TkMessage.new(root) { x='target';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
69
|
+
TkMessage.new(root) { x='tcross';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
70
|
+
TkMessage.new(root) { x='top_left_arrow';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
71
|
+
TkMessage.new(root) { x='top_left_corner';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
72
|
+
TkMessage.new(root) { x='top_right_corner';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
73
|
+
TkMessage.new(root) { x='top_side';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
74
|
+
TkMessage.new(root) { x='top_tee';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
75
|
+
TkMessage.new(root) { x='trek';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
76
|
+
TkMessage.new(root) { x='ul_angle';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
77
|
+
TkMessage.new(root) { x='umbrella';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
78
|
+
TkMessage.new(root) { x='ur_angle';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
79
|
+
TkMessage.new(root) { x='watch';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
80
|
+
TkMessage.new(root) { x='xterm';text x;background 'green';cursor x}.pack('side'=>'left', padx: 4, 'padx'=>2)
|
81
|
+
Tk.mainloop
|
82
|
+
# rb fun_with_cursors.rb
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
require 'tk_paradise'
|
6
|
+
require 'colours/autoinclude'
|
7
|
+
|
8
|
+
root = TkRoot.new() { title 'Hello, world!' }
|
9
|
+
|
10
|
+
TkLabel.new(root) {
|
11
|
+
text 'Hello, World!'
|
12
|
+
pack { padx 25 ; pady 25; side 'left' }
|
13
|
+
}
|
14
|
+
# Add the hello world button next:
|
15
|
+
button = TkButton.new(root) {
|
16
|
+
text 'Hello, World!'
|
17
|
+
command proc {
|
18
|
+
e 'I am saying '+sfancy('hello world')+'!'
|
19
|
+
}
|
20
|
+
}
|
21
|
+
button.pack
|
22
|
+
Tk.mainloop
|
@@ -0,0 +1,21 @@
|
|
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
|
+
USE_THIS_FONT = TkFont.new(family: 'Helvetica', size: 20, weight: 'bold')
|
10
|
+
|
11
|
+
root = TkRoot.new
|
12
|
+
root.geometry('800x600+0+0')
|
13
|
+
entry = TkEntry.new(root) {
|
14
|
+
font USE_THIS_FONT
|
15
|
+
pack
|
16
|
+
}
|
17
|
+
entry.bind('Key', proc {|this_key|
|
18
|
+
e "This key was pressed: `#{this_key}`"
|
19
|
+
}, '%K')
|
20
|
+
|
21
|
+
Tk.mainloop
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
require 'tk'
|
6
|
+
|
7
|
+
TITLE = 'Several buttons'
|
8
|
+
root = TkRoot.new { title TITLE }
|
9
|
+
root.geometry('550x450+10+10')
|
10
|
+
buttons = %w( one and one ).map { |entry|
|
11
|
+
TkButton.new(root, text: entry)
|
12
|
+
}
|
13
|
+
TkGrid.grid(buttons[0], buttons[1], buttons[2], columnspan: 2 )
|
14
|
+
TkButton.new(root, text: 'is').grid(columnspan: 3, sticky: 'ew')
|
15
|
+
TkButton.new(root, text: 'two', width: 50).grid("row"=>1, "column"=>3, "columnspan"=>3)
|
16
|
+
Tk.mainloop
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# Encoding: UTF-8
|
3
|
+
# frozen_string_literal: true
|
4
|
+
# =========================================================================== #
|
5
|
+
require 'tk_paradise'
|
6
|
+
|
7
|
+
include Tk
|
8
|
+
|
9
|
+
IMAGE = '/home/x/DATA/images/HUE2.gif'
|
10
|
+
|
11
|
+
root = TkRoot.new() { title 'Packing Example' }
|
12
|
+
|
13
|
+
button = TkButton.new(root) { text 'First, rightmost' }
|
14
|
+
button.pack('side'=>'right', 'fill'=>'y')
|
15
|
+
|
16
|
+
entry = TkEntry.new(root).pack('side'=>'top', 'fill'=>'x')
|
17
|
+
entry.insert(0, 'Entry on the top')
|
18
|
+
|
19
|
+
label = tk_label('to the right', root) { :on_right }
|
20
|
+
|
21
|
+
our_image = tk_image(image, height: 50)
|
22
|
+
img_label = TkLabel.new(root) { image(our_image) }.pack('anchor'=>'e')
|
23
|
+
|
24
|
+
text = TkText.new(root) { width 20; height 5 }.pack('side'=>'left')
|
25
|
+
text.insert('end', 'Left in canvas')
|
26
|
+
|
27
|
+
tk_label('Message in the Bottom', root) { :on_bottom }
|
28
|
+
Tk.run
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'tk'
|
2
|
+
|
3
|
+
class PigBox
|
4
|
+
|
5
|
+
# ========================================================================= #
|
6
|
+
# === PADDING_TO_USE
|
7
|
+
# ========================================================================= #
|
8
|
+
PADDING_TO_USE = {
|
9
|
+
padx: 10,
|
10
|
+
pady: 10
|
11
|
+
}
|
12
|
+
|
13
|
+
# ========================================================================= #
|
14
|
+
# === initialize
|
15
|
+
# ========================================================================= #
|
16
|
+
def initialize
|
17
|
+
use_this_callback = proc { show_pig }
|
18
|
+
root = TkRoot.new { title 'Pig' }
|
19
|
+
top = TkFrame.new(root)
|
20
|
+
TkLabel.new(top) {
|
21
|
+
text 'Enter Text:'
|
22
|
+
pack(PADDING_TO_USE)
|
23
|
+
}
|
24
|
+
@text = TkVariable.new
|
25
|
+
@entry = TkEntry.new(top, textvariable: @text)
|
26
|
+
@entry.pack(PADDING_TO_USE)
|
27
|
+
TkButton.new(top) {
|
28
|
+
text 'Pig It'
|
29
|
+
command use_this_callback
|
30
|
+
pack PADDING_TO_USE
|
31
|
+
}
|
32
|
+
TkButton.new(top) {
|
33
|
+
text 'Exit'
|
34
|
+
command {proc exit}
|
35
|
+
pack PADDING_TO_USE
|
36
|
+
}
|
37
|
+
top.pack(fill: 'both', side: 'top')
|
38
|
+
end
|
39
|
+
|
40
|
+
# ========================================================================= #
|
41
|
+
# === pig
|
42
|
+
# ========================================================================= #
|
43
|
+
def pig(word)
|
44
|
+
leadingCap = word =~ /^A-Z/
|
45
|
+
word.downcase!
|
46
|
+
res =
|
47
|
+
case word
|
48
|
+
when /^aeiouy/
|
49
|
+
"#{word}way"
|
50
|
+
when /^([^aeiouy]+)(.*)/
|
51
|
+
$2+$1+"ay"
|
52
|
+
else
|
53
|
+
word
|
54
|
+
end
|
55
|
+
leadingCap ? res.capitalize : res
|
56
|
+
end
|
57
|
+
|
58
|
+
# ========================================================================= #
|
59
|
+
# === show_pig
|
60
|
+
# ========================================================================= #
|
61
|
+
def show_pig
|
62
|
+
@text.value = @text.value.split.collect{|w| pig(w)}.join(' ')
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
if __FILE__ == $PROGRAM_NAME
|
68
|
+
PigBox.new
|
69
|
+
Tk.mainloop
|
70
|
+
end
|