簡體   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