#!/usr/bin/ruby
# Import the library.
require 'tk'
# Root window.
root = TkRoot.new {
title 'Push Me'
background '#111188'
}
# Add a label to the root window.
lab = TkLabel.new(root) {
text "Hey there,\nPush a button!"
background '#3333AA'
foreground '#CCCCFF'
}
# Make it appear.
lab.pack('side' => 'left', 'fill' => 'both')
class TwoLabs < TkFrame
# Switch button colors.
def cswap
# Swap each color between the two buttons.
for loc in ['background', 'foreground', 'activebackground']
c = @swapbut.cget(loc)
@swapbut.configure(loc => @stopbut.cget(loc))
@stopbut.configure(loc => c)
end
end
def initialize
super
# Here's a button. I can't get the command setting to work
# inside the block, since the self (apparently) becomes the TkButton,
# not us.
@swapbut = TkButton.new(self, 'command' => proc { self.cswap } ) {
text "Swap"
background '#EECCCC'
activebackground '#FFEEEE'
foreground '#990000'
pack('side' => 'top', 'fill' => 'both')
}
# Another button
@stopbut = TkButton.new(self) {
text "Exit"
background '#CCEECC'
activebackground '#EEFFEE'
foreground '#009900'
command { exit }
pack('side' => 'bottom', 'fill' => 'both')
}
end
end
# A frame can be used to arrange buttons with the packer.
tl = TwoLabs.new
tl.pack('side' => 'right', 'fill' => 'both')
Tk.mainloop