Python AttributeError: module 'runAnalytics' has no attribute 'run'
Python AttributeError: module 'runAnalytics' has no attribute 'run'
我正在尝试使用 tkinter 从我的 main.py 文件中获取输入,然后在 runAnalytics.py
中使用该输入
main.py
import runAnalytics
import tkinter
import os
import centerWindow
loadApplication = tkinter.Tk()
loadApplication.title("Stock Analytics")
loadApplication.geometry("1080x720")
label1 = tkinter.Label(loadApplication, text = "Ticker")
input1 = tkinter.Entry(loadApplication)
loadAnalytics = tkinter.Button(loadApplication, text = "Load Analytics", command = runAnalytics.run)
centerWindow.center(loadApplication)
loadAnalytics.pack()
label1.pack()
input1.pack()
loadApplication.mainloop()
runAnalytics.py
from yahoo_finance import Share
from main import input1
import tkinter
import os
import centerWindow
def run():
ticker = input1
loadAnalytics = tkinter.Tk()
loadAnalytics.title("$" + ticker + " Data")
loadAnalytics.geometry("1080x720")
print ("Price per share: " + ticker.get_price())
ticker.refresh()
print ("Price per share: " + ticker.get_price())
print("The dividend yield is: " + ticker.get_dividend_yield())
print("The 52 week low is: " + ticker.get_year_low())
print("The 52 week high is: " + ticker.get_year_high())
print("The volume is: " + ticker.get_volume())
print("The previous close was: " + ticker.get_prev_close())
print("The previous open was: " + ticker.get_open())
loadAnalytics.mainloop()
我的错误信息如下;
Traceback (most recent call last):
File "C:\Users\MyName\Documents\Python Projects\MarketData\main.py", line 1, in <module>
import runAnalytics
File "C:\Users\MyName\Documents\Python Projects\MarketData\runAnalytics.py", line 2, in <module>
from main import input1
File "C:\Users\MyName\Documents\Python Projects\MarketData\main.py", line 13, in <module>
loadAnalytics = tkinter.Button(loadApplication, text = "Load Analytics", command = runAnalytics.run)
AttributeError: module 'runAnalytics' has no attribute 'run'
尝试将 () 添加到 runAnalytics.run 的末尾。您目前正在告诉它寻找它没有的 run
属性而不是函数
loadAnalytics = tkinter.Button(loadApplication, text = "Load Analytics", command = runAnalytics.run())
from runAnalytics import run
loadAnalytics = tkinter.Button(loadApplication, text="Load Analytics", command=run)
您不想开始 tk
的另一个 mainloop
。相反,您应该传递 root
并创建顶层 window.
def run(root):
ticker = input1
parent = Toplevel(root)
parent.title("$" + ticker + " Data")
# the rest of your code
你有一个循环导入:
import runAnalytics
# ..
from main import input1
再次导入 main
时,runAnalytics
还没有机会执行 def run():
.. 部分。
通过删除 from main import input1
行解决此问题,并将该对象作为参数传递:
def run(input1):
调用函数时从 main.py
模块传入:
loadAnalytics = tkinter.Button(loadApplication, text = "Load Analytics", command = lambda: runAnalytics.run(input1))
除了循环导入之外,还有一个问题是,无论你运行作为主脚本在Python中的什么文件都会被存储为__main__
模块。再次导入同一脚本将导致创建 second 模块,现在名称为 main
,并且在该模块中创建的任何对象都不同于 __main__
中的对象].
接下来,您需要删除 来自 run
的 loadAnalytics.mainloop()
调用,因为您不应该从已经 运行宁循环。您可能还想创建一个新的 TopLevel
window 而不是创建另一个 Tk()
根。如果你这样做,你也必须将 loadApplication
传递给 run
。
我正在尝试使用 tkinter 从我的 main.py 文件中获取输入,然后在 runAnalytics.py
中使用该输入main.py
import runAnalytics
import tkinter
import os
import centerWindow
loadApplication = tkinter.Tk()
loadApplication.title("Stock Analytics")
loadApplication.geometry("1080x720")
label1 = tkinter.Label(loadApplication, text = "Ticker")
input1 = tkinter.Entry(loadApplication)
loadAnalytics = tkinter.Button(loadApplication, text = "Load Analytics", command = runAnalytics.run)
centerWindow.center(loadApplication)
loadAnalytics.pack()
label1.pack()
input1.pack()
loadApplication.mainloop()
runAnalytics.py
from yahoo_finance import Share
from main import input1
import tkinter
import os
import centerWindow
def run():
ticker = input1
loadAnalytics = tkinter.Tk()
loadAnalytics.title("$" + ticker + " Data")
loadAnalytics.geometry("1080x720")
print ("Price per share: " + ticker.get_price())
ticker.refresh()
print ("Price per share: " + ticker.get_price())
print("The dividend yield is: " + ticker.get_dividend_yield())
print("The 52 week low is: " + ticker.get_year_low())
print("The 52 week high is: " + ticker.get_year_high())
print("The volume is: " + ticker.get_volume())
print("The previous close was: " + ticker.get_prev_close())
print("The previous open was: " + ticker.get_open())
loadAnalytics.mainloop()
我的错误信息如下;
Traceback (most recent call last):
File "C:\Users\MyName\Documents\Python Projects\MarketData\main.py", line 1, in <module>
import runAnalytics
File "C:\Users\MyName\Documents\Python Projects\MarketData\runAnalytics.py", line 2, in <module>
from main import input1
File "C:\Users\MyName\Documents\Python Projects\MarketData\main.py", line 13, in <module>
loadAnalytics = tkinter.Button(loadApplication, text = "Load Analytics", command = runAnalytics.run)
AttributeError: module 'runAnalytics' has no attribute 'run'
尝试将 () 添加到 runAnalytics.run 的末尾。您目前正在告诉它寻找它没有的 run
属性而不是函数
loadAnalytics = tkinter.Button(loadApplication, text = "Load Analytics", command = runAnalytics.run())
from runAnalytics import run
loadAnalytics = tkinter.Button(loadApplication, text="Load Analytics", command=run)
您不想开始 tk
的另一个 mainloop
。相反,您应该传递 root
并创建顶层 window.
def run(root):
ticker = input1
parent = Toplevel(root)
parent.title("$" + ticker + " Data")
# the rest of your code
你有一个循环导入:
import runAnalytics
# ..
from main import input1
再次导入 main
时,runAnalytics
还没有机会执行 def run():
.. 部分。
通过删除 from main import input1
行解决此问题,并将该对象作为参数传递:
def run(input1):
调用函数时从 main.py
模块传入:
loadAnalytics = tkinter.Button(loadApplication, text = "Load Analytics", command = lambda: runAnalytics.run(input1))
除了循环导入之外,还有一个问题是,无论你运行作为主脚本在Python中的什么文件都会被存储为__main__
模块。再次导入同一脚本将导致创建 second 模块,现在名称为 main
,并且在该模块中创建的任何对象都不同于 __main__
中的对象].
接下来,您需要删除 来自 run
的 loadAnalytics.mainloop()
调用,因为您不应该从已经 运行宁循环。您可能还想创建一个新的 TopLevel
window 而不是创建另一个 Tk()
根。如果你这样做,你也必须将 loadApplication
传递给 run
。