So... this is kind of twisting my brain a bit. Not sure I understand how/why this works the way it does. Some help or explanation would be appreciated.

On the one hand, I keep reading about the evils/perils of wildcard imports and recommendations for named imports. On the other hand, it seems like nearly every tkinter example in books, guides, tutorials that I see uses a wildcard import.

So I was trying to follow along some code examples from a recent book, and also trying to use python3 as much as practical. Given that the original book code was python 2.x and I had to change 'Tkinter' to 'tkinter', I figured why not change to using a named import, i.e.

import tkinter as tk

rather than

from Tkinter import *

Other than having to import a 'tk.' to widget names, I figured I should be good to go. Unfortunately not. The book had code like this:

from tkinter import *
root = Tk()
Label(root, text="Username").grid(row=0, sticky=W)

While what I was coming up with was more like this:

import tkinter as tk
root = tk.Tk()
tk.Label(root, text="Username").grid(row=0, sticky='W')


The difference being that unless I enclosed the W attribute for the option 'sticky=' in quotes, I got an error 'Unresolved reference 'W''.

I asked online, and found that apparently 'W' is imported along with 'Label', 'Entry', 'Button', 'Tk', etc. at the top level of tkinter. It appears I can use either a wildcard import, enclose it in quotes, or use explicit reference e.g. tk.W.

My question is this: How / why does this make any sense, that an attribute (W) to an option (sticky=) would be imported at the same level as widgets themselves? Is it some artifact left over from tcl, or just a bad idea that never went away? Between having to explicitly reference every widget already (tk.Label) and having to be extra specific with options like sticky... I'm starting to see why everyone uses wildcard imports when it comes to tkinter!

Thanks,

Monte

_______________________________________________
Tkinter-discuss mailing list
Tkinter-discuss@python.org
https://mail.python.org/mailman/listinfo/tkinter-discuss

Reply via email to