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)のように位置を決める。
終わった~!
この記事が気に入ったらサポートをしてみませんか?