[Tutor] some tkinter questions

Hans Nowak hnowak@cuci.nl
Sat, 18 Dec 1999 00:08:25 +0100

On 17 Dec 99, at 15:12, Suzanne Little wrote:

> Hello, 
> I've been learning Python for a little over 3 weeks now and I've run into
> a couple of snags. 
> 1. I've created a window that pops up using toplevel and I want to click
> 'cancel' in that window and close only that window. Specifically the code
> is w1 = Toplevel()
>    w1.window = createWin(w1)
>    w1.window.pack()

I've stumbled upon this problem last week; I used a slightly 
different approach, but I think you can use w1.destroy() or maybe 
w1.window.destroy(). w1.quit() will quit the whole application, as 
you will probably have found out.

> 2. Communication between modules/classes: I've got a main gui window
> running with a listbox. In anther module I want to add/delete/access
> an item from the listbox and I'm having some problems. I've got two
> functions written in the main module which will get the selection and
> update the list both of which work successfully but I can't call them from
> the other module. I suspect that this may be because both the modules
> import each other. That is main imports the sub modules and the sub
> modules import main, therefore when I start the program by running main it
> tries to use one of the submodules and gets to the point in it where it
> tries to access a function in main and fails. What do you think?

Normally it should be perfectly possible for two modules to import 
each other. 

# m1.py

def foo(x): return x

import m2

----end of m1.py

# m2.py

def bar(x): return x-1

import m1

----end of m2.py

This code works; I can start m1.py and m2.py. It doesn't seem to work 
if you move the import statements to the top, before the function 
definitions.  ...Often, mutual importing is a sign of bad design. I'm 
not saying this is the case here (and I've had several projects 
myself where I was obliged to use such constructions), but if moving 
the import statements (like shown above) doesn't work, maybe you 
could consider and try redesigning the code.

> 3. Is there any easy way of getting the representation of an instance? For
> example if I create a = myClass() and add a to a kjset, can I then ask
> what is at some point in the set and get back a as opposed to <myClass at
> instance 1209ef> or something? 

I'm assuming a kjset behaves somewhat like a list? If you define the 
__repr__ method in myClass, you can define what will be printed:

(Example IDLE session)

>>> class MyClass:
	def __repr__(self):
		return "I am a happy class at " + str(id(self))
>>> a = MyClass()
>>> a
I am a happy class at 8430352

> 4. I've also had some problems attaching a scroll to the listbox. I can
> get one showing but it will only move one position down. Any suggestions?

Did you try the example mentioned at 


...? It works for me...

> 5. Can I implement drop down menus in tkinter?

I don't know if it is included with "standard" Tkinter... I know that 
Pmw has them though.

Hope this helps,

--Hans Nowak (zephyrfalcon@hvision.nl)
Homepage: http://fly.to/zephyrfalcon
You call me a masterless man. You are wrong. I am my own master.