954,176 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

reading(printing to screen) program

I was helping my 6 year old read some sentenses he learned in school. for example:

the dog is on skates
the bird is on a plane
the pig rides the horse

I noticed he was not really reading(kind of) the individual words, he had the whole sentenses memorized. When I used the words he knew, but in a different order, he has to try much harder to make out the sentenses. This forses him to sound out each individual word.

I came up with a neat idea for a python program. As he learns new words I could put them into a different lists: one list containing verbs, another containing nouns. then have the program generate random sentenses. This would be easy to do if i was just outputing the words to the terminal. The problem with that is, they are small to read.

I would like some ideas on outputting the sentense the script generates to a window with larger text, maybe even specific font I choose. So eveytime I press enter, or click on the window, a new sentense will be displayed across the monitor.

Would tkinter, gtkgame, wxpython would be the easiest(or best). This seems like a nice simple way to learn some basic gui stuff. Any suggestions would be appreciated.

shanenin
Posting Whiz in Training
217 posts since May 2005
Reputation Points: 10
Solved Threads: 17
 

You know this is a wonderful project. I remember when my son was about four, I wrote a hangman game where he had to guess rather simple words. He just loved that game. By the time he got to school, he was way ahead in spelling.

Here is one idea, put the text on a button, you click it and it changes ...
[php]# display a random sentence from a list in colorful Tkinter

from Tkinter import *
import random

black = '#000000'
blue = '#0000FF'
red = '#FF0000'
yellow = '#FFFF00'
lime = '#00FF00'

sentenceList = ['the dog is on skates', 'the bird is on a plane', 'the pig rides the horse']

def setText():
str1 = random.choice(sentenceList)
push1.config(text=str1)

#create the form
form1 = Tk()
# set the form's title
form1.title('Random Text')
# create a button
push1 = Button(form1, text='Click to set new text .............', command=setText)
# configure the button's text font and colors
push1.config(height=3, font=('times', 20, 'bold'), fg=black, bg=yellow)
# pack the button into the frame
push1.pack(expand=YES, fill=BOTH)
# start the event loop (run the program)
form1.mainloop()
[/php]
Pick the font, size and colors you want.

vegaseat
DaniWeb's Hypocrite
Moderator
5,976 posts since Oct 2004
Reputation Points: 1,345
Solved Threads: 1,416
 

Thanks, I will examine your code later :-) I will let you know it gos

shanenin
Posting Whiz in Training
217 posts since May 2005
Reputation Points: 10
Solved Threads: 17
 

The Tkinter GUI would be my choice for short fun programs like that. Our friend mawe is an expert on Tkinter, so he might have better ideas.

vegaseat
DaniWeb's Hypocrite
Moderator
5,976 posts since Oct 2004
Reputation Points: 1,345
Solved Threads: 1,416
 

I just ran your program as you wrote it, it is perfect, as far as the output goes. When I have some time, I will make a random sentense generator, kind of madlib like.

shanenin
Posting Whiz in Training
217 posts since May 2005
Reputation Points: 10
Solved Threads: 17
 

Hi!

Here is a version with a canvas:

from Tkinter import *
import random

sentence_list = [
    "the dog is on skates",
    "the bird is on a plane",
    "the pig rides the horse",
    "one more senseless sentence"
]

def draw_text():
    text = random.choice(sentence_list)
    c.delete("all")
    c.create_text(250,100,text=text,font="times 30 bold")

root = Tk()
c = Canvas(width=500,height=200,bg="white")
c.pack()
Button(text="Next Text", command=draw_text).pack()
root.mainloop()


Regards, mawe

mawe
Junior Poster
133 posts since Sep 2005
Reputation Points: 19
Solved Threads: 58
 

cool, I really like that. I will probably use it :-)

thanks guys

**rambling**
man python is great. you can do such nice stuff with next to no code, or programming experience.

shanenin
Posting Whiz in Training
217 posts since May 2005
Reputation Points: 10
Solved Threads: 17
 

**rambling**
man python is great. you can do such nice stuff with next to no code, or programming experience.

--- and it is so easy to experiment with the codes!

bumsfeld
Nearly a Posting Virtuoso
1,445 posts since Jul 2005
Reputation Points: 404
Solved Threads: 184
 

here is wht I came up with. thanks mawe for your code :-) is their a max size I can set the font?

#!/usr/bin/env python
#
# readit
#
from Tkinter import *
import random
adj = ('red', 'green', 'yellow', 'blue', 'pink', 'orange', 'purple')
numbers = ( 'one','one','one','one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine')
animals = ('bird', 'teacher', 'cow', 'goat', 'pig', 'dog', 'duck', 'cat', 'sister', 'grandmother', 'friend')
phrase = ('is in a car', 'is on a bike', 'is in a boat',  'is on a train', 'is on skates', 'is on a plane', 'is on a horse')
have = ('school','teacher','classroom','table','book','work')

# I have %s(numbers) %s(adj) %s(have)%s(either "" or 's')   
format1 = "I have %s %s %s%s"

# The %s(number) %s(animals)%s(either "", or 's') %(phrase) 
format2 = "%s %s%s %s." 

def choices():
    radj = random.choice(adj)
    rnumbers = random.choice(numbers)
    ranimals = random.choice(animals)
    rphrase = random.choice(phrase)
    rhave = random.choice(have)
    return radj, rnumbers, ranimals, rphrase, rhave

def one_format(choice):
    ret = choice
    if ret[1] != 'one':
        quant = 's.'
    else:
        quant = '.'
    return format1%(ret[1],ret[0],ret[4],quant)
    
def second_format(choice):
    ret = choice
    if ret[1] != 'one':
        quant = 's'
    else:
        quant = ""
    sentence = format2%(ret[1].title(),ret[2],quant,ret[3])
    if quant == 's':
        sentence = sentence.replace(' is ',' are ')
    return sentence
    
def make_sentence():
    if random.choice(range(2)) == 0:
        return second_format(choices())
    else:
        return one_format(choices())
    
# this following code was giving to me my mauve
# I changed the sizes around a bit
def draw_text():
    text = make_sentence()
    c.delete("all")
    c.create_text(500,100,text=text,font="arial 100 bold")

root = Tk()
c = Canvas(width=1000,height=200,bg="white")
c.pack()
Button(text="Next Text", command=draw_text).pack()
root.mainloop()
shanenin
Posting Whiz in Training
217 posts since May 2005
Reputation Points: 10
Solved Threads: 17
 

strange, on linux my font will only get so large, no matter what number I set it at. even if I set it at 60, it seems to get no larger then it does if I set it at 30.

On windows the font seems to get larger and larger. If I set it to 60 the sentences will not even fit on the screen.

I am not sure why it is not working correctly with linux :confused:

shanenin
Posting Whiz in Training
217 posts since May 2005
Reputation Points: 10
Solved Threads: 17
 

Windows supplies most of the fonts as "true type fonts" ( .TTF ). Don't know what Linux uses?

bumsfeld
Nearly a Posting Virtuoso
1,445 posts since Jul 2005
Reputation Points: 404
Solved Threads: 184
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You