繁体   English   中英

为什么命名/通配符导入会/如何影响参数?

[英]Why/how does named vs wildcard import affect parameters?

所以...我正在修补一些基本的python / tkinter程序,并将正在阅读的书中的python 2.x的代码翻译为3.x,以确保我理解所有内容。 我还试图用名为“ proper”的导入而不是通配符导入(即from tkinter import *编写代码,但效果不佳...

目前让我感到困惑的是:原始代码对tkinter进行了通配符导入,并且似乎能够不使用诸如sticky=W类的参数变量加引号而“逃脱”,而如果我执行命名导入,必须在'W'周围使用引号,否则会出现错误Unresolved reference 'W'

示例代码(通配符导入):

from tkinter import *
root = Tk()

Label(root, text="Username").grid(row=0, sticky=W)
Label(root, text="Password").grid(row=1, sticky=W)
Entry(root).grid(row=0, column=1, sticky=E)
Entry(root).grid(row=1, column=1, sticky=E)
Button(root, text="Login").grid(row=2, column=1, sticky=E)

root.mainloop()

命名导入:

import tkinter as tk

root = tk.Tk()

tk.Label(root, text="Username").grid(row=0, sticky='W')
tk.Label(root, text="Password").grid(row=1, sticky='W')
tk.Entry(root).grid(row=0, column=1, sticky='E')
tk.Entry(root).grid(row=1, column=1, sticky='E')
tk.Button(root, text="Login").grid(row=2, column=1, sticky='E')

root.mainloop()

两者都起作用,但是为什么python一次只能识别一种方式,而另一次却不能呢?

from tkinter import *

tkinter模块加载所有内容,并将其放入全局名称空间中。


import tkinter as tk

tkinter模块加载所有内容, 并将其全部放入tk命名空间中。 所以Label现在是tk.LabelWtk.W


第三种选择是:仅需要模块中的几个对象,更好:

from tkinter import Label, Entry, Button, W, E, Tk

再说一次,当您只需要一两个时,效果会更好。 不利于您的情况。 仅出于完整性考虑。


幸运的是,您只有一个import *否则您将很难确定所有内容来自哪个模块!


编辑:

tkinter.W = 'w'
tkinter.E = 'e'
tkinter.S = 's'
tkinter.N = 'n'

它们只是常量。 您可以传递字符串 ,它也可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM