前提・実現したいこと
Python初学者で、初めてのプログラミングとしてtkinterを使い、デスクトップ自動販売機を作りたいと思っています。
環境:windows10, Python 3.7、tkinterを使っています。
まず、それぞれの飲み物の名前をKey、値段と在庫数のリストをValueとしてディクショナリを作りました。
それぞれの飲み物のボタンオブジェクトを生成し、そのコマンドとして、引数に飲み物名を渡し、飲み物を買う機能としてchoose_drinkメソッドを実行したいと思っています。
しかし、このボタンオブジェクトを作るコードでエラーが出ており、解決できません。
まだ初心者なので、そもそもの理解が間違っていることもあるかもしれませんが、教えていただけるとありがたいです。
発生している問題・エラーメッセージ
File ".\test2.py", line 27, in main btn_sportsdrink = tk.Button(self.master, text = "sportsdrink:{}".format(self.dict["sportsdrink"][0]), command = self.choose_drink("sportsdrink"), anchor = "c", justify = "center")
該当のソースコード
test.py
1import tkinter as tk 2 3class Application(tk.Frame): 4 def __init__(self,master): 5 super().__init__(master) 6 #出てくる画面のサイズを指定します 7 master.geometry("600x800") 8 #出てくる画面の背景色を指定します 9 master.configure(background='red') 10 self.message = "" 11 self.input_sum = 0 12 self.purchased_cola = 0 13 #ここでディクショナリをつくる 14 self.dict = {"cola":[120, 20], "sportsdrink":[150, 10], "zero":[140, 24], "orange":[130, 40], "tea":[100, 19], "soda":[200, 10], "apple":[170, 10], "melonsoda":[110, 20]} 15 16 def main(self): 17 self.image1 = tk.PhotoImage(file = "./img/drink1.png").subsample(4) 18 tk.Label(self.master, image = self.image1, bg="black").place(x = 25, y = 50) 19# ここでボタンを作る 20# ここのボタンでは、 21 btn_sportsdrink = tk.Button(self.master, text = "sportsdrink:{}".format(self.dict["sportsdrink"][0]), command = self.choose_drink("sportsdrink"), anchor = "c", justify = "center") 22 btn_sportsdrink.place(x = 60, y = 210) 23 24 def choose_drink(self, drink): 25 if self.input_sum - self.dict[drink][0] > 0: 26 self.input_sum -= self.dict[drink][0]
試したこと
text = "sportsdrink:{}".format(self.dict["sportsdrink"][0])
の部分んの構文が違うのかと思い調べたが、dictのKeyとしてsportsdrinkというドリンク名を入れ、Valueのインデックス0に値するドリンクの金額をformatを使ってTextに渡しているため問題ないはず?self.choose_drink("sportsdrink")
の部分で、引数の受け渡しの際に型が違っているのかと考えたが、str形で引数を渡し、choose_drink(self, drink)がdictのKeyもstr型であるため大丈夫そう?
補足情報(FW/ツールのバージョンなど)
- windows10
- python 3.7
- tkinter
- エディタ:VScode
初歩的なミスかもしれませんが、初心者のため原因が分からず躓いています。
どなたか教えていただけると助かります。よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー