0

I was wondering how Python would work with this program I wanted to make. I have very little experience with Python, so bare with me. What I wanted was to make a program that brought up quotes randomly from a .txt file and put them in a XP/Vista message bubble from the icon of the program in the system tray. It wouldn't have a traditional GUI, just the icon in the system tray with the bubble with the quote in it every four hours from start up. I imagine Python could bring up random quotes in a window pretty easily, I just don't know if it will allow me to have the tooltip thing from the system tray.

I had asked this question on another forum, and I had a lot of posts saying that the program was a horribly stupid and useless idea. It's actually my first experiment with coding anything besides html/CSS/PHP/XML, considering I started in web design and never had the opportunity for anything else, because I picked up everything I know through experience. The other reason I wanted to make this program is that my best friend had asked me to, so I am.

I've got the ability to write the code with Eclipse/PyDev and I'm using Windows for the moment, until I get sick of it.

4
Contributors
6
Replies
8
Views
9 Years
Discussion Span
Last Post by zachabesh
0

I wouldn't know how to put it into a windows program, but a random quote generator was my first program too!

They way I did it was make a dictionary, the quote was the key, the value was the author.

EDIT: Oh, wait I see what you mean about system tray pop up bubbles. Yep, that's way over my head, but sounds fun.

Anyway, here's essentially what I wrote for my first python experiment, minus the dictionary, adding a class.

import random
quotefile = open('quotes.txt','r')
linelist = quotefile.read().split('\n') #read the file however you'd like, this is just how i sometimes do it
quotefile.close()

class Quote:
[INDENT]def __init__(self,quote,author):
[INDENT]self.quote = quote
self.author = author[/INDENT]
def __str__(self):
[INDENT]s = '"%s" -%s' %(self.quote,self.author)[/INDENT][/INDENT]

quotelist = []
for line in linelist:
[INDENT]thesplit = line.split()
quote = Quote(thesplit[0],thesplit[1])
quotelist.append(quote)[/INDENT]

quotechoice = random.choice(quotelist)
print quotechoice

Note that you'd have to change the line splitting or file reading parts depending on how your txt file is written.

0

For the "GUI" portion of your program you'll likely want to look into wxPython. There are a number of other toolkits for creating GUIs but wx is by far the most native-looking so it'll get you a very clean looking interface that looks like it was built right into Windows. It'll be impressive for your friend I'm sure.

0
import random
quotefile = open('quotes.txt','r')
linelist = quotefile.read().split('\n') #read the file however you'd like, this is just how i sometimes do it
quotefile.close()

class Quote:
[INDENT]def __init__(self,quote,author):
[INDENT]self.quote = quote
self.author = author[/INDENT]
def __str__(self):
[INDENT]s = '"%s" -%s' %(self.quote,self.author)[/INDENT][/INDENT]

quotelist = []
for line in linelist:
[INDENT]thesplit = line.split()
-- quote = Quote(thesplit[0],thesplit[1]) --
quotelist.append(quote)[/INDENT]

quotechoice = random.choice(quotelist)
print quotechoice

A couple of questions. One, I would have to put "/n" in my quote.txt at the end, beginning or both of each quote? Two, I get an error when trying to run the .py on line 22. I'm assuming I didn't specify the correct file for the quote.txt, but I don't know. The quote.txt file is in the correct workspace folder.

0

EDIT: I get the error:

IndexError: List index out of range

I assume that means I didn't index/split up the quotes.txt correctly. I've tried a bunch of different ways of doing it, but I can't get it to work.

0

Adding these print statements should shed some light on this if I understand what you want to do. Run it this way and if it does not give you an idea of what is happening then post back.

quotelist = []
for line in linelist:
     thesplit = line.split()
     print "\nline"
     print "     split into", thesplit
##     -- quote = Quote(thesplit[0],thesplit[1]) --
##     quotelist.append(quote)
0

Sorry bout that, a comment might have made that more clear.

A better way to read a file:

def readafile(file):
[INDENT]linelist = []
while 1:
[INDENT]line = file.readline()
if not line:
[INDENT]break[/INDENT]
linelist.append(line)[/INDENT]
return linelist[/INDENT]

The file reading part depends on how your file is formatted. BTW, '\n' (note the slash direction) is a linebreak. So a text file looking like this:

Hi, this is line 1. Moving along.
Line 2, super cool.

So, let's say this is our code:

file = open('quotes.txt')
wholefile = file.read()

wholefile is a string:

'Hi, this is line1. Moving along.\nLine2, super cool'

so

linelist = wholefile.split('\n')

should make linelist a list containing:

Anyway, stick some print statements in there so you can figure out what went wrong, what I like to do is use the IDLE Python GUI where you get those fun little

>>>

and see if each function is returning what it is supposed to.

PS: If you're getting an index error, chances are theres a line of whitespace at the end of your file, you can wrap the code in a try except but it may be easier to just take the whitespace out. ;)

-zach

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.