私はmain.pyからユーザー入力を受け取り、その情報を使ってrunAnalyticsで出力を生成しようとしています。私が実行している問題は、時には、dividen_yieldが利用できないときにユーザ入力がNone(おそらくヌル、私は知らない)の値を生成し、次に私の全プログラムが停止することがあるということです。それは配当利回りがあるときに完璧に動作します。Python Tkinter TypeError: 'int'オブジェクトは呼び出し可能ではありません
main.py
import runAnalytics
from tkinter import *
import os
import centerWindow
loadApplication = Tk()
loadApplication.title("Stock Analytics")
loadApplication.geometry("1080x720")
label1 = Label(loadApplication, text = "Ticker")
input1 = Entry(loadApplication)
loadAnalytics = Button(loadApplication, text = "Load Analytics", command=lambda: runAnalytics.run(input1))
centerWindow.center(loadApplication)
label1.pack()
input1.pack()
loadAnalytics.pack()
loadApplication.mainloop()
runAnalytics.py
from yahoo_finance import Share
from tkinter import *
import os
import centerWindow
def run(input1):
ticker = Share(input1.get())
loadAnalytics = Tk()
loadAnalytics.title("$" + "ticker" + "Data")
loadAnalytics.geometry("1080x720")
centerWindow.center(loadAnalytics)
ticker.refresh()
if ticker.get_dividend_yield() is None:
ticker.get_dividend_yield == 0
share_price = Label(loadAnalytics, text = "Share Price: " + ticker.get_price()).pack()
prev_open = Label(loadAnalytics, text = "Previous Open: " + ticker.get_open()).pack()
prev_close = Label(loadAnalytics, text = "Previous CLose: " + ticker.get_prev_close()).pack()
dividend_yield = Label(loadAnalytics, text = "Dividend Yield: " + ticker.get_dividend_yield()).pack()
year_low = Label(loadAnalytics, text = "52 Week Low: " + ticker.get_year_low()).pack()
year_high = Label(loadAnalytics, text = "52 Week High: " + ticker.get_year_high()).pack()
volume = Label(loadAnalytics, text = "Volume: " + ticker.get_volume()).pack()
loadAnalytics.mainloop()
[エラー]
Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\MyName\AppData\Local\Programs\Python\Python35-32\lib\tkinter__init__.py", line 1550, in call return self.func(*args) File "C:\Users\MyName\Documents\Python Projects\DataAnalytics\main.py", line 13, in loadAnalytics = Button(loadApplication, text = "Load Analytics", command=lambda: runAnalytics.run(input1)) File "C:\Users\MyName\Documents\Python Projects\DataAnalytics\runAnalytics.py", line 21, in run dividend_yield = Label(loadAnalytics, text = "Dividend Yield: " + ticker.get_dividend_yield()).pack() TypeError: 'int' object is not callable
が完璧に働いていたこと、どうもありがとう(
CLose
はClose
する必要があります)。あなたが私に尋ねる気にならないなら、.formatを追加するのはなぜですか?それを行うことによって、何か違うものがコンパイルされていますか? – Andrewまた、私はそれをもう一度実行したが、括弧 "{}"を削除して実行しましたが、何も表示されませんでした。大括弧はなぜ必要なのですか?申し訳ありません、私はちょうど興味があります。 – Andrew
大括弧は、文字列に入力する変数のプレースホルダです。また、文字列に1つ以上の変数を渡すと物がちょっと乱雑になるかもしれません(ドキュメントを見てください)。残念ながら、私はフォーマットミニ言語がどのようにボンネットの下で働いているか完全にはわかりません。しかし、正式な仕様は[PEP 3101](https://www.python.org/dev/peps/pep-3101/)にあります。 – albert