繁体   English   中英

Python AttributeError:“ str”对象没有属性“ get_price”

[英]Python AttributeError: 'str' object has no attribute 'get_price'

我试图从main.py接收用户输入,然后将输出调整为所说的用户输入。 我不仅收到此错误,而且似乎在我启动main.py时正在运行runAnalytics,而不是在按下按钮命令时才运行。

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(input1))

centerWindow.center(loadApplication)

loadAnalytics.pack()
label1.pack()
input1.pack()

loadApplication.mainloop()

runAnalytics.py

from yahoo_finance import Share
import tkinter
import os
import centerWindow

def run(input1):
    ticker = Share(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()

错误信息:

追溯(最近一次通话):文件“ C:\\ Users \\ MyName \\ Documents \\ Python Projects \\ MarketData \\ main.py”,第13行,在loadAnalytics = tkinter.Button(loadApplication,text =“ Load Analytics”,command = runAnalytics.run(input1))文件“ C:\\ Users \\ MyName \\ Documents \\ Python Projects \\ MarketData \\ runAnalytics.py”,第12行,运行打印(“每股价格:” + ticker.get_price())AttributeError: 'str'对象没有属性'get_price'

您假设runAnalytics正在运行是正确的,因为将函数按您的方式绑定到按钮时会执行该函数。

根据effbot文档,您需要使用lambda函数,以便将带有传递参数的函数绑定到按钮,如下所示:

import tkinter

def test_func(val):
    print(type(val))
    print(val)
    share_id = val.get()
    print(share_id)


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=lambda: test_func(input1))


loadAnalytics.pack()
label1.pack()
input1.pack()

loadApplication.mainloop()

但是,还有第二件事要牢记:

input1 = tkinter.Entry(loadApplication)

创建一个名为input1Entry小部件,然后将其传递给该函数。 问题是input1不包含您在条目小部件中键入的字符串,而是包含对该小部件的引用(小部件ID)。 为了获取小部件的内容,您需要调用其.get()方法,如我的代码片段所示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM