當前位置:首頁 ? tkinter ? 正文

模塊導入方法import的不同方式的區別

這篇文章要先講一個導入模塊的問題,因為有不少的朋友都搞不清楚,如何導入模塊,或者無法搞清楚導入模塊方法不同的區別。

下一篇文章,我還開始講解ttk組件了,這需要再導入另外一個模塊,所以,這個時候我來講一下導入模塊的問題,以及各種導入方式的區別很有必要。

 

我們在編寫tkinter程序時,首先就寫:from tkinter import *  那么,這個tkinter模塊到底在哪個位置呢?我們以前編程曾經導入的random,  messagebox模塊又在哪個位置呢?

我來幫大家找到它。

 

首先,大家要先找到你電腦里python的安裝目錄。

你在你的電腦桌面,任務欄,或開始菜單里找到pyhton圖標  2.PNG,鼠標右鍵點這個圖標,再點屬性或相關菜單,找到文件的位置,就找到了python的安裝目錄。

在python的安裝目錄下,有一個文件夾叫Lib,進入這個目錄,你會發現,你想找到的模塊很多都在這里,如模塊tkinter,這個Lib文件夾里對應就有一個文件夾叫tkinter,這個tkinter文件夾里,有你以前用過,或聽過的模塊在里面: messagebox.py   font.py  colorchooser.py  ttk.py .......

我的python安裝在C:\Python39\

我打開python安裝目錄文件夾下的Lib子文件夾圖示如下:    丶丌皛

1.PNG 

 再打開tkinter子文件夾,有我們比較熟悉的模塊文件:

3.PNG

 

好了,進入這個tkinter文件夾,看看里面的文件,有__init__.py  ttk.py 等文件,好,現在我來講模塊,導入方式等問題了。

 

1.  tkinter是一個文件夾,由于文件夾有__init__.py 這個文件,在python知識中,把這個有__init__.py的文件夾叫“包”

 

2.  當我們導入包時,__init__.py就會自動執行,__init__.py也是一個模塊文件,模塊名就是對應的包名。

 

3.  我們在前面寫代碼時,開始就會寫:  from tkinter import * 這是導入方式之一,當導入tkinter這個包時,__init__.py已經自動自動執行了。

 

下面我們講一下從包里導入模塊的方法,一般有3種方式:

tkinter這個包里,有ttk這個模塊,現在我先假定ttk這個模塊有abc這個變量。

 

1>  import 包名.模塊名

  如:import  tkinter.ttk

  要調用abc變量時,要加包和模塊的前綴: print( tkinter.ttk.abc )

 

2>  from  包名  import  模塊名

  如:from  tkinter  import  ttk

  要調用abc變量時,加前綴不用包的前綴: print( ttk.abc )

 

3>  from 包名.模塊名 import 定義名

  如 from  tkinter.ttk  import  abc

要調用abc變量時,不用加前綴: print( abc )

 

有些前綴太長,或前綴不太好記,我們可以另取名稱:

 

我們可以在導入模塊的時候,為包改名,因為有時候,有些包名太長,碼字太累,而有些包名,你認為取得并不好,我們想為它改一個更好的名字。

1>  import 包名.模塊名 as  改的包名

   如:import  tkinter.ttk  as  t1

   要調用abc變量時,要加包和模塊的前綴: print( t1.abc )

 

2>  from  包名  import  模塊名 as  改的包名

   如:from  tkinter  import  ttk  as  t2

   要調用abc變量時,加前綴不用包的前綴: print( t2.abc )

 

通配符:

3>  from 包名.模塊名 import 定義名

   如 from  tkinter.ttk  import  abc

要調用abc變量時,不用加前綴: print( abc )

如果要調用這個模塊內的另外一個變量名cde ,怎么辦,沒有辦法,因為你只是導入了abc這個變量,并沒有導入cde這個變量。如果你想模塊內的組件類,變量等都一次導入,又不想寫前綴,那么可以用通配符 *  如:

from  tkinter.ttk  import  *

 

下面以實例來檢測上面說的導入方式: 

在tkinter包里,有ttk這個模塊,這個模塊的也有按鈕Button組件,但ttk模塊里的按鈕組件可以跟系統主題有一樣的外觀,而之前的tkinter模塊里的按鈕Button組件只有灰色經典的外觀,顯得有點土。

 

下面以實例,來檢測以上的導入方式:

第1種方式:

# import tkinter.__init__
import tkinter
import tkinter.ttk
 
root=tkinter.Tk()
 
but1=tkinter.Button(root,text="  測 試 按 鈕 1 ")
but1.pack(padx=50,pady=10)
 
but2=tkinter.ttk.Button(root,text="  測 試 按 鈕 2 ")
but2.pack(padx=50,pady=10)
 
root.mainloop()

運行結果:

4.PNG

說明:當導入包里,__init__.py就會自動執行,所以 import tkinter 就行,不用寫成 import tkinter.__init__ (但這樣寫,也一樣可以)

 

第1種方式,包改名:

import tkinter as AAA  # tkinter另取名:AAA
import tkinter.ttk as BBB # tkinter.ttk另取名:BBB
 
root=AAA.Tk()
 
but1=AAA.Button(root,text="  測 試 按 鈕 1 "
but1.pack(padx=50,pady=10)
 
but2=BBB.Button(root,text="  測 試 按 鈕 2 ")
but2.pack(padx=50,pady=10)
 
root.mainloop()

運行結果跟上面的完全一樣。

  

第2種導入方式導入ttk:

import tkinter
from tkinter import ttk
 
root=tkinter.Tk()
 
but1=tkinter.Button(root,text="  測 試 按 鈕 1 ")
but1.pack(padx=50,pady=10)
 
but2=ttk.Button(root,text="  測 試 按 鈕 2 ")
but2.pack(padx=50,pady=10)
 
root.mainloop()

運行結果跟上面的一樣。

 

 第2種導入方式導入ttk并改包名:

import tkinter
from tkinter import ttk as CCC # ttk另取名:CCC
 
root=tkinter.Tk()
 
but1=tkinter.Button(root,text="  測 試 按 鈕 1 ")
but1.pack(padx=50,pady=10)
 
but2=CCC.Button(root,text="  測 試 按 鈕 2 ")
but2.pack(padx=50,pady=10)
 
root.mainloop()

運行結果跟上面的一樣。

  

第3種導入模塊方式:

import tkinter
from tkinter.ttk import Button # ttk模塊只導入Button類
 
root=tkinter.Tk()
 
but1=tkinter.Button(root,text="  測 試 按 鈕 1 ")
but1.pack(padx=50,pady=10)
 
but2=Button(root,text="  測 試 按 鈕 2 ")
but2.pack(padx=50,pady=10)
 
root.mainloop()

運行結果跟上面一樣。


但上面這個代碼,由于ttk模塊只導入Button類,所以你想創建個ttk風格標簽或別的組件就不行了,因為你并沒有導入標簽類和別的組件類,如果你一方面想在輸入代碼時輕松些,不加前綴,另一方面也想隨時創建其它的組件,那么可以用通配符*

import tkinter
from tkinter.ttk import * # 用通配符導入所有組件類,變量等
 
root=tkinter.Tk()
 
but1=tkinter.Button(root,text="  測 試 按 鈕 1 ")
but1.pack(padx=50,pady=10)
 
but2=Button(root,text="  測 試 按 鈕 2 ")
but2.pack(padx=50,pady=10)
 
root.mainloop() # 源碼來自  www.chinaengraver.com

以上代碼,就可以自由創建各種ttk風格的組件了。

看上去用通配符很是方便呀,我之前的講解用的模塊導入方式是:

from tkinter import *

用這種方式不用加前綴,也可以自由創建tkinter風格的各種組件,在輸入方面的確很方便。但是,但是…… 關鍵是還有一些方面的問題:

   

看運行下面的代碼:

from tkinter import  *
from tkinter.ttk import *
 
root=Tk()
 
but1=Button(root,text="  測 試 按 鈕 1 ")
but1.pack(padx=50,pady=10)
 
but2=Button(root,text="  測 試 按 鈕 2 ")
but2.pack(padx=50,pady=10)
 
root.mainloop()

運行結果:

5.PNG

由于上面的代碼,在導入tkinter,ttk都使用通配符,那后面導入ttk的組件類,變量就會覆蓋前面導入的tkinter的組件類,變量,正因為這個原因,這2個按鈕都是顯示ttk風格。

稍大的程序,導入的模塊可能有很多個模塊,如果都用通配符來導入,方便是方便,但只要后面有相同名稱的組件類名,變量名,后面就會覆蓋前面的,就會引起不同的麻煩及錯誤,可能你還找不到問題所在,所以,稍小的程序,用通配符*沒有問題,稍大的程序,導入太多的模塊,就不要用通配符*了。

大家根據實際情況,決定用什么方式導入模塊。

我接下來的文章會講解ttk知識,由于我的程序一般短小,也沒有導入別的什么模塊,不太擔心由于組件名,變量名重名而出現問題,于是,我就用:

from tkinter import  *
from tkinter.ttk import *

這樣做,一來,不用寫前綴,二來,無論是Button組件,還是后來要講解的新組件,都是ttk風格,在風格上是統一。

 

如果你想區分tkinter, ttk組件,只要不用通配符,這樣,只要寫了前綴,就可以區分是是引用由哪一個包的哪一個模塊。

      此文章來自:wb98.com  網站還有相關的系列課程文章,感興趣的可以前往。

下一篇文章,我來講解ttk基礎知識


來源:濟亨網

本文鏈接:http://www.chinaengraver.com/post/334.html

    << 上一篇 下一篇 >>

    湘公網安備 43011102000514號 - 湘ICP備08100508號

    2019年秋霞鲁丝片瓜皮_导航亚洲AV日韩AV永久无码_有没有哪些可以看片的免费的_国产色妞妞在线视频免费播放