AttributeError:'module'对象没有属性'Hardware'

时间:2016-03-01 09:37:40

标签: python tkinter

你好我们创建了一个gui程序UBT我有一个问题就是我想要使用多个程序然后将它们传递给其他程序:

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是我在python中导入的另一个程序,以保持一切美观和整洁。但我有一个问题看起来如下:

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

1 个答案:

答案 0 :(得分:1)

问题在于,当您从命令行运行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的{​​{1}}。我们现在正在a执行。由于a.py已经导入为b,因此不需要重新导入,因此我们进入下一行,即打印b的名称和第一行输出是a。现在这个文件已经完成,所以我们回到Import a,然后输出b。然后就完成了,我们回到Import b,它正在执行__main__中的代码(但是是一个名为a.py的独立模块!),因此我们输出__main__

您的问题是您有类似的循环导入:Import __main__(我假设您直接从命令行运行gui)导入python gui.py和{{1}然后重新导入 functions。但是,对于上面的functions gui案例,实际上第一个a.py被加载到名为b.py的模块中,因此当gui导入{{1}时它创建一个名为__main__ 的新模块,然后执行functions中的所有代码以填充新的gui模块

现在我们有三个模块:gui,它仍在执行第4行guigui执行第4行__main__。因此,我们执行所有import functions as f以填充functions模块,当我们到达第4行时,我们已导入import gui as g,因此我们不会执行gui.py。但是,因为我们仅在gui 的第4行,我们尚未在functions中创建函数,即functions.pyfunctions 。因此,当我们到达第19行时:

functions
{p> new_hard_window Hardware又名hard_button=Button(frame, text="Hardware",bg=v.bg_color,command=f.Hardware) 模块中尚不存在,因为我们尚未进入该行代码。所以这失败了。

你真正的问题是你试图同时使用python文件作为脚本和模块 。重构您的代码,以便脚本仅用作脚本而不是同时用作模块。