2016-03-01 93 views
0

好傢伙即時創建GUI程序UBT我有一個問題是,我想使用多個程序,然後將它們傳遞到其他人,像這樣:AttributeError的:「模塊」對象有沒有屬性「硬件」

from tkinter import * 
import os 
import variables as v 
import functions as f 
#Functions : 

    #Configuration of the window 
root=Tk() 
root.configure(bg=v.bg_color) 
root.geometry(v.resolution) 
root.title(v.title) 
    #G.U.I. 
     #Message : 
message = Label(root, text="Choose your category:", anchor=W,bg=v.bg_color) 
message.pack(fill=X) 
    #Category Buttons : 

frame=Frame(root) 
hard_button=Button(frame, text="Hardware",bg=v.bg_color,command=f.Hardware) 
hard_button.config() 
hard_button.pack(side=LEFT) 
root.mainloop() 

那就是你看到的是,在該行的一部分: hard_button=Button(frame, text="Hardware",bg=v.bg_color,command=f.Hardware) 在命令我有一個f.Hardware命令嗯,這是我的問題f.Hardware是,我導入內部蟒蛇把一切都很好另一個程序和整齊。但我有一個問題看下面的波紋管:

import os 
import variables as v 
import tkinter as tk 
import gui as g 

def new_hard_window(): 
    g.root.destroy() 

def Hardware(): 
    new_hard_window() 
    hard_path=os.chdir(v.path+"Hardware") 
    print(os.listdir(hard_path)) 

我知道第一個函數和第二個函數中的一個錯誤是第二行中的第一行,但我不知道如何解決它。如果你想在你的系統中運行代碼,那麼我還提供了另一個名爲變量的文件。非常感謝你們!

path="N:\Python_Programming\Hangman\\" 
bg_color="#FFFFFF" 
resolution="200x90" 
title="Hangman" 

隨意更改路徑:-P

+0

我想我可以使用類似於:'if __name __ =='__main __''在我的函數文件中__but__我從來沒有用過它,所以我不知道如何使用它之前,我不知道如何使用它。你們覺得怎麼樣 ? – Spiruni

+0

您的硬件類是否在功能模塊上聲明? –

+0

是的,它宣佈 – Spiruni

回答

0

的問題是,當您運行命令行Python文件,它是由不同的Python解釋器處理。您可以通過在同一目錄下創建兩個文件如下實驗:

a.py

import b 
print('Import %s' % __name__) 

b.py

import a 
print('Import %s' % __name__) 

現在,如果你運行python a.py您將獲得:

Import a 
Import b 
Import __main__ 

爲什麼?因爲python爲它正在執行的文件創建了一個名爲__main__的新模塊。該文件所做的第一件事是導入b,其中導入了a。因爲這次a.py被作爲一個模塊導入,而不是直接運行,python爲它創建了一個新模塊,稱爲a。所以現在你有兩個模塊來自同一個文件,一個叫__main__,另一個叫a

繼續,__main__已導入b已導入a。我們現在正在執行a.py。因爲b已經被導入爲b,所以不需要重新導入,所以我們進入下一行打印名稱a,第一行輸出爲Import a。現在這個文件完成了,所以我們回到b,輸出Import b。然後完成,我們回到__main__,它正在執行a.py中的代碼(但是它是一個單獨的模塊,名爲__main__!),所以我們輸出Import __main__

你的問題是,你有類似的圓形進口:gui(我假設你是直接在命令行中運行python gui.py)進口functions,並functions然後reimportsgui。但是,對於上述a.pyb.py情況下,實際上是第一個gui被加載到一個名爲__main__模塊,所以當functions進口gui它創建了一個名爲gui新的模塊,然後執行gui所有的代碼來填充新gui模塊

所以,現在我們有三個模塊:__main__,它仍在執行行4 import functions as f,functions它正在執行行4 import gui as g。所以我們執行所有gui.py來填充gui模塊,當我們到達第4行時,我們已經導入了functions,所以我們不會重新執行functions.py。但是,因爲我們只在functions的第4行,所以我們還沒有創建functions中的函數,即new_hard_windowHardware。因此,當我們到19行:

hard_button=Button(frame, text="Hardware",bg=v.bg_color,command=f.Hardware) 

Hardware尚不存在的functions又名f模塊的,因爲我們還沒有走上這行代碼呢。所以這失敗了。

你真正的問題是,你正在嘗試使用python文件作爲腳本和作爲模塊在同一時間。重構您的代碼,以便腳本僅用作腳本而不是同時用作模塊。

+0

謝謝你,我會嘗試。 – Spiruni

相關問題