[Tutor] Tkinter Q's

jfouhy@paradise.net.nz jfouhy at paradise.net.nz
Wed Jul 13 00:46:28 CEST 2005


Quoting Joseph Quigley <cpu.crazy at gmail.com>:

> Hi first off, here's my code:
> 
> # -*- coding: utf-8 -*-
> from Tkinter import *
> import random
> import time
> import about
> import quotes
> 
> 
> def closeprog():
>  raise SystemExit
> 
> class main:
>  root = Tk()
>  frame = Frame()
>  root.title("Quoter %s" % (about.ver))
>  root.minsize(300, 50)
> 
>  showquote = Label(root, text=random.choice(quotes.quote))
>  showquote.pack()
> 
>  exit = Button(root, text="Exit", command=closeprog)
>  exit.pack(side=LEFT)
> 
>  aboutprg = Button(root, text="About", command=about.main)
>  aboutprg.pack(side=LEFT)
> 
> 
>  totalq = Label(root, text=quotes.qts)
>  totalq.pack(side=BOTTOM)
>  
>  root.mainloop()
> 
> (I'd appreciate some suggestions, or notifications on how bad something
> is)

Some comments ---

You create a Frame, but you never use it.

You've put a whole lot of code in a class, but it's not in a class method.  This
is kinda missing the point of using classes in the first place (and it just
flat-out wouldn't work in the majority of OO languages).

Here's what I would do:

class Main(Frame):
    def __init__(self, master=None, **kw):
        Frame.__init__(self, master, **kw)

        showquote = Label(self, text=random.choice(quotes.quote))
        showquote.pack()

        # etc

if __name__ == '__main__':
    root = Tk()
    main = Main(root)
    main.pack(fill=BOTH, expand=True)
    root.mainloop()
###

Do you see what I am doing there, and why it is different from your approach?

> I have a small problem: I don't know how to make a button that would 
> redisplay another quote in the same window, ie I need a button that 
> says: Show Another Quote. (Actually I don't know how to make it show 
> another quote even in a new window!!). I got the interface from Catfood

Once you've got a label, you can change its text attribute by using its
.config() method.

So, you could do something like this:

    # ...
    showquote = Label(self, text=random.choice(quotes.quote))
    showquote.pack()

    def changeQuote():
        currQuote = showquote.cget('config')  # Get the current quote
        newQuote = random.choice(quotes.quote)
        while newQuote == currQuote:          # Make sure the new quote differs
            newQuote = random.choice(quotes.quote)
        showquote.config(text=newQuote)
    Button(self, text='Show another quote', command=changeQuote).pack()

-- 
John.


More information about the Tutor mailing list