2016-03-01 21 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

相关问题