見出し画像

Python学習:Day27

Day 27続き
*argと**kwargsについてなんだけど、
*argは与えられた数字をTupleに入れる
**kwargsはKey とValueのdictionaryを作る

ってことでいいのかな。

👩‍💻簡単にPythonで書くと、

def test(*args, **kwargs):
    print(args)
    print(kwargs)

test(1, 2, 'hoge')

⌨️すると出力は、tupleに入り、KeyとValueがないのでdictionaryは空っぽ。
(1, 2, 'hoge')
{}



🖊️でもKeyとValueを定義すると(colとrow),

def test(*args, **kwargs):
    print(args)
    print(kwargs)

test(1, 2, 3, 4, 5, col=4, row=5)

⌨️出力は、tupleとdictionaryが作成される。
(1, 2, 3, 4, 5)  <----tuple
{'col': 4, 'row': 5} <---dictionary

そして今度は🐢Turtleの時と同様に、Classを使って**kwでInitすると、self.colorなどが使える。(Import TurtleでTurtleの中のFunctionsを使うような感じだなぁ。

class Car:
    def __init__(self, **kw):
         self.make = kw["make"]
         self.model = kw["model"]


my_car = Car(make="Nissan", model="GT-R")
print(my_car.make)

出力は、
GT-R



でも、
my_car = Car(make="Nissan)だけにして、
print(my_car.model)にするとModelを入れてないので、Crash!下のErrorが出る😭

KeyError: 'model'
そこでCrashさせないよう、kw[ ]からkw.get( )に変えると、

class Car:
    def __init__(self, **kw):
         self.make = kw["make"]
         self.model = kw.get("model")
         self.color = kw.get("color")
         self.seats = kw.get("seats")

my_car = Car(make="Nissan")
print(my_car.model)


出力は、
None  (ええ感じやん)


🐻‍❄️ Getを使うと、Keyがdictionaryになければエラー出なくNoneと返してくれる。🤗
さらに練習してみると、

【入力】
def bar(spam, eggs, toast='yes please!', ham=0):
    print(spam, eggs, toast, ham)
 
bar(1, 2)


【出力】
1  2  ''yes please!'  0
【入力】
def bar(spam, eggs, toast='yes please!', ham=0):
    print(spam, eggs, toast, ham)
 
bar(toast='nah', spam=4, eggs=2)

【出力】
4  2  'nah'  0 

問題1は、
【入力】

def test(*args):
    print(args)
 
test(1,2,3,5)


【出力】 args は tupleなので、( )の中に入る。

(1, 2, 3, 4, 5)




問題2(同じ要領で)
【入力】

def all_aboard(a, *args, **kw): 
    print(a, args, kw)
 
all_aboard(4, 7, 3, 0, x=10, y=64)


【出力】

4 (7, 3, 0) {'x':10, 'y':64}

だんだんわかってきたぞ! よし、次!(理論がわかれば簡単)

from tkinter import *

window = Tk()
window.title("My First GUI Program")
window.minsize(width=500, height=300)

#label

my_label = Label(text="I Am a Label", font=("Ariel"))
my_label.pack()

my_label["text"] = "New Text"
my_label.config(text="New Text")

#Button

def button_clicked():
    print("I got clicked")
    new_text = input.get()
    my_label.config(text=new_text)

button = Button(text="Click Me", command=button_clicked)
button.pack()

#Entry

input = Entry(width=10)
input.pack()
print(input.get())




window.mainloop()

これは分解すると、
from tkinter import *でTKinterにあるfunctionを何でもできるようにする。

次はこんな画面を作ってるわけやね。
”My First GUI Program”って可愛いタイトル付けた。

次はLabelを作って"text"=" I Am Label"で最初のタイトルは書いたけど、New Textに変換できるようにしてる。
my_label["text"] = "New Text"
my_label.config(text="New Text")

Buttonと Entryを作って、
一番最初は
Entryに記入してclickすると上に同じテキストが現れる。
print("I got cliked")は最初のテストに使ったので無視。その次の 
#Entry
input = Entry(width=10)
input.pack()
print(input.get())

では、
input.get()がdefで定義されているので、Buttoの中に書き込みClickすると、その文字がTitleに現れる。

最後はマイルをKmに変換する画面を作る。

出来ると嬉しい!

コードは以下の通り。自分で最初から考えるのはめちゃ難しい!


from tkinter import *

def miles_to_km():
    miles =float()
    km = round(miles * 1.689)
    kilometer_result_lable.config(text=f"{km}")


window = Tk()
window.title("Miles to Kilometer Converter")
window.config(padx=20, pady=20)

mile_input = Entry(width=7)
mile_input.grid(column=1, row=0)

miles_label = Label(text="Miles")
miles_label.grid(column=2, row=0)

is_equal_label = Label(text="is equal to ")
is_equal_label.grid(column=0, row=1)

kilometer_result_lable = Label(text="0")
kilometer_result_lable.grid(column=1, row=1)

kilometer_label = Label(text="Km")
kilometer_label.grid(column=2, row=1)

calculater_button = Button(text="Calculate", command=miles_to_km)
calculater_button.grid(column=1, row=2)



window.mainloop()

defの中のmile_input.get()で、入力を書き込めるようになる。
miles_label = Label(text="Miles")のように、labelを使って決まった位置に表示する。決まった位置を定義するには、miles_label.grid(column=2, row=0)のように位置を決める。

 終わった~!

この記事が気に入ったらサポートをしてみませんか?