Tk-8

Sobre la base del programa anterior, he creado unas variaciones que son:

Adición de un campo donde poner tu nombre si quieres.
Adición de conversión a centímetros y metros, con limitación de dos decimales máximo
Al pulsar en el botón de calcular, aparecer su nombre, un icono motivacional y una palabra de agradecimiento.

=begin
=end

require 'tk'

$mili = TkVariable.new
$pulgadas = TkVariable.new
$cen = TkVariable.new
$metro = TkVariable.new
$nombre = TkVariable.new

v = TkRoot.new {title "Conversor"}
v.geometry('640x480')
v.minsize(600,380)

TkLabel.new(v) {
text ' ¿Cómo te llamas ? '
font TkFont.new('times 15')
place('relx'=>0.1,'rely'=>0.150)
}

e5 = TkEntry.new(v){
   textvariable $nombre
   font TkFont.new('times 15')
   place('relx'=>0.55,'rely'=>0.15)
   borderwidth 2
   }

e1 = TkLabel.new(v) {
text 'Conversión de pulgadas a milímetros'
font TkFont.new('times 20 bold')
foreground  "red"
place('relx'=>0.1,'rely'=>0.05)
}

e2 = TkLabel.new(v) {
text 'Escribe la cantidad de pulgadas: '
font TkFont.new('times 15')
foreground  "blue"
place('relx'=>0.1,'rely'=>0.25)
}

e3 = TkEntry.new(v){
   textvariable $pulgadas
   font TkFont.new('times 15')
   place('relx'=>0.55,'rely'=>0.25)
   borderwidth 2
   }
TkLabel.new(v) {
text ' Equivale a: '
font TkFont.new('times 15')
place('relx'=>0.33,'rely'=>0.50)
}

TkLabel.new(v) {
textvariable $mili
foreground  "red"
font TkFont.new('times 20')
place('relx'=>0.50,'rely'=>0.49)
}


TkLabel.new(v) {
textvariable $cen
foreground  "red"
font TkFont.new('times 20')
place('relx'=>0.50,'rely'=>0.59)
}

TkLabel.new(v) {
textvariable $metro
foreground  "red"
font TkFont.new('times 20')
place('relx'=>0.50,'rely'=>0.69)
}

TkButton.new(v) {
text 'Calcular'
command {cal}
place('relx'=>0.6,'rely'=>0.38)
}
e4 = TkLabel.new(v) {
text 'Una pulgada equivale a 25.4 milímetros. '
font TkFont.new('times 15')
place('relx'=>0.3,'rely'=>0.8)
}

=begin
TkLabel.new(v) {
textvariable $nombre
font TkFont.new('times 16')
foreground  "blue"
place('relx'=>0.08,'rely'=>0.73)
}
=end

TkLabel.new(v) {
text " milímetros."
font TkFont.new('times 15')
place('relx'=>0.70,'rely'=>0.50)
}

TkLabel.new(v) {
text " centímetros."
font TkFont.new('times 15')
place('relx'=>0.70,'rely'=>0.60)
}

TkLabel.new(v) {
text " metros."
font TkFont.new('times 15')
place('relx'=>0.70,'rely'=>0.70)
}

salir = TkButton.new(v) {
text 'Salir'
command 'exit'
place('relx'=>0.9,'rely'=>0.9)
}
$foto = TkPhotoImage.new
$foto.file = "buena1.gif"

# con el método .round redondeamos el número para que muestre dos decimales
def cal

  begin
     $mili.value = (25.4*$pulgadas).round(2)
     $cen.value = (2.54*$pulgadas).round(2)
     $metro.value = (0.254*$pulgadas).round(2)
         
  rescue
     $mili.value = ''
     $cen.value = ''
     $metro.value = ''
         
  end
TkLabel.new { #Unas etiqueta con sorpresa
text 'Gracias'
font TkFont.new('times 16')
foreground  "blue"
place('relx'=>0.09,'rely'=>0.83)

TkLabel.new {
textvariable $nombre
font TkFont.new('times 16')
foreground  "blue"
place('relx'=>0.08,'rely'=>0.73)
}

label = TkLabel.new 
label.image = $foto
label.place('x' => 80, 'y' => 250)
end

Tk.mainloop





AdjuntoTamaño
Datos Binarios Tk-8.rb2.99 KB
Icono de Imagen buena1.gif2.18 KB
Icono de Imagen Tk-8.png20.82 KB
Icono de Imagen Tk-8-1.png31.72 KB

Tk-7

Éste es el primer programa real que hago con TK.

Consiste en un conversor de pulgadas a milímetros.
Consta de una pequeña foto que incrusto en una zona de la ventana.

=begin
=end

require 'tk'

$mili = TkVariable.new
$pulgadas = TkVariable.new

v = TkRoot.new {title "Conversor"}
v.geometry('640x480')
v.minsize(600,380)

e1 = TkLabel.new(v) {
text 'Conversión de pulgadas a milímetros'
font TkFont.new('times 20 bold')
foreground  "red"
place('relx'=>0.1,'rely'=>0.1)
}

e2 = TkLabel.new(v) {
text 'Escribe la cantidad de pulgadas: '
font TkFont.new('times 15')
foreground  "blue"
place('relx'=>0.1,'rely'=>0.25)
}

e3 = TkEntry.new(v){
   textvariable $pulgadas
   place('relx'=>0.55,'rely'=>0.25)
}
TkLabel.new(v) {
text ' Equivale a: '
font TkFont.new('times 15')
place('relx'=>0.35,'rely'=>0.50)
}

TkLabel.new(v) {
textvariable $mili
foreground  "red"
font TkFont.new('times 20')
place('relx'=>0.51,'rely'=>0.49)
}

TkButton.new(v) {
text 'Calcular'
command {cal}
place('relx'=>0.6,'rely'=>0.38)
}
e4 = TkLabel.new(v) {
text 'Una pulgada equivale a 25,4 mm. '
font TkFont.new('times 15')
place('relx'=>0.3,'rely'=>0.65)
}

TkLabel.new(v) {
text " milímetros"
font TkFont.new('times 15')
place('relx'=>0.70,'rely'=>0.50)
}

salir = TkButton.new(v) {
text 'Salir'
command 'exit'
place('relx'=>0.9,'rely'=>0.9)
}
foto = TkPhotoImage.new
foto.file = "buena1.gif"

label = TkLabel.new(v) 
label.image = foto
label.place('height' => foto.height, 'width' => foto.width, 'x' => 80, 'y' => 250)


def cal
  begin
     $mili.value = (25.4*$pulgadas)
  rescue
     $mili.value = ''
  end
end

Tk.mainloop




AdjuntoTamaño
Icono de Imagen buena1.gif2.18 KB
Datos Binarios Tk-7.rb1.55 KB
Icono de Imagen Tk-7.png19.39 KB

Tk-6

En esta ocasión hemos añadido una barra de desplazamiento vertical para manejarse en el texto cuando hay demasiadas líneas


=begin
=end

require 'tk'

top = TkRoot.new {title "Etiqueta, entrada de texto y botón salir"}
top.geometry('640x480')
top.minsize(400,400)


#code to add a label widget
lb0=TkLabel.new(top){
   text 'Esto es una prueba de colocación de etiquetas, campos y botones en una ventana'
   background "yellow"
   foreground "blue"
   place('relx'=>0.0,'rely'=>0.0)
}
lb1=TkLabel.new(top){
   text '0123456789 '
   background "yellow"
   foreground "blue"
   place('relx'=>0.08,'rely'=>0.08)
}

lb2=TkLabel.new(top){
   text 'Aquí puedes escribir:'
   background "green"
   foreground "black"
   place('relx'=>0.05,'rely'=>0.15)
}

text = TkText.new(top) do
   width 60
   height 15
   borderwidth 1
   font TkFont.new('times 12 bold')
   place('relx'=>0.1,'rely'=>0.2)
  
end

 vbar = TkScrollbar.new {
    orient 'vert'
    pack(:side => :right, :fill => :y)
    }
text.yscrollbar(vbar)
text.insert 'end', "Hola!\n\ntext widget example"

=begin
relx y rely son las posiciones relativas respecto de la ventana
en %, por eso es un número decimal
relx y en rely el decimal es la posición x ó y respe
=end
#code to add a entry widget
e1 = TkEntry.new(top){
   background "red"
   foreground "blue"
   place('relx'=>0.2,'rely'=>0.08)
}
sal = TkButton.new(top) {
text 'Salir'
command 'exit'
place('relx'=>0.9,'rely'=>0.9)
}
Tk.mainloop




AdjuntoTamaño
Datos Binarios Tk-6.rb1.47 KB
Icono de Imagen Tk-6.png10.69 KB

Tk-5

En esta ocasión, fijamos el tamaño de la ventana en 640x480 y su tamaño ´mínimo en 400x400.

También se añade un cuadro de texto,
Todos los elementos están posicionados mediante place

=begin
=end

require 'tk'

top = TkRoot.new {title "Etiqueta, entrada de texto y botón salir"}
top.geometry('640x480')
top.minsize(400,400)

#code to add a label widget
lb0=TkLabel.new(top){
   text 'Esto es una prueba de colocación de etiquetas, campos y botones en una ventana'
   background "yellow"
   foreground "blue"
   place('relx'=>0.0,'rely'=>0.0)
}
lb1=TkLabel.new(top){
   text '0123456789 '
   background "yellow"
   foreground "blue"
   place('relx'=>0.08,'rely'=>0.08)
}

lb2=TkLabel.new(top){
   text 'Aquí puedes escribir:'
   background "green"
   foreground "black"
   place('relx'=>0.05,'rely'=>0.15)
}
text = TkText.new(top) do
   width 60
   height 15
   borderwidth 1
   font TkFont.new('times 12 bold')
   place('relx'=>0.1,'rely'=>0.2)
end
text.insert 'end', "Hola!\n\nEsto es un ejemplo"
=begin
relx y rely son las posiciones relativas respecto de la ventana
en %, por eso es un número decimal
relx y en rely el decimal es la posición x ó y respectivamente
=end
#code to add a entry widget
e1 = TkEntry.new(top){
   background "red"
   foreground "blue"
   place('relx'=>0.2,'rely'=>0.08)
}
sal = TkButton.new(top) {
text 'Salir'
command 'exit'
place('relx'=>0.9,'rely'=>0.9)
}
Tk.mainloop



Y en su mínima expresión de 400x400:



AdjuntoTamaño
Datos Binarios Tk-5.rb1.36 KB
Icono de Imagen Tk-5.png9.91 KB
Icono de Imagen Tk-5-1.png8 KB

Tk-4

En esta ocasión añadimos el tamaño a la ventana que queremos (640x480) y una etiqueta en medio en la posición relativa que queremos.

El posicionamiento de los contenidos se hace mediante relx y rely, lo cual no es útil si la ventana se redimensiona manualmente, pues, al ocupar una posición relativa cada elemento, puede llegar a colapsarse o superponerse.

=begin
=end

require 'tk'

top = TkRoot.new {title "Etiqueta, entrada de texto y botón salir"}
top.geometry('640x480')

#code to add a label widget
lb0=TkLabel.new(top){
   text 'Esto es una prueba de colocación de etiquetas, campos y botones en una ventana'
   background "yellow"
   foreground "blue"
   place('relx'=>0.1,'rely'=>0.0)
}
lb1=TkLabel.new(top){
   text '0123456789 '
   background "yellow"
   foreground "blue"
   place('relx'=>0.1,'rely'=>0.1)
}

lb2=TkLabel.new(top){
   text '0123456789(0.2 - 0.5)'
   background "green"
   foreground "black"
   place('relx'=>0.5,'rely'=>0.5)
}

=begin
relx y rely son las posiciones relativas respecto de la ventana
en %, por eso es un número decimal
relx y en rely el decimal es la posición x ó y respe
=end
#code to add a entry widget
e1 = TkEntry.new(top){
   background "red"
   foreground "blue"
   place('relx'=>0.19,'rely'=>0.1)
}
sal = TkButton.new(top) {
text 'Salir'
command 'exit'
place('relx'=>0.9,'rely'=>0.9)
}
Tk.mainloop



Y colapsado:


AdjuntoTamaño
Datos Binarios Tk-4.rb1.37 KB
Icono de Imagen a resolución 640x4809.2 KB
Icono de Imagen colapsado8.47 KB

Páginas

Suscribirse a Ruby (Español) RSS