Python

C#が、Microsoft社とDelphi社の二段構えという大袈裟な陣営が幸いしてか災いしてか、出来はいいが、神輿(みこし)が重過ぎる感が否めないのに対して、Python(パイソン)は空飛ぶモンティ.パイソンのファンであるGuido van Rossuなる米国在住のオランダ人が個人で開発を始めたプログラミング言語ということで、そもそも毛色が大きく違っている。

Python自体はC言語によって書かれているが、Cの厳格性など、幾つかの特徴を犠牲にして、その代わりに言語が本来備えるべき「分かり易さ」を優先した言語と言われます。その結果、Rossu氏許諾の元、世界各地の開発協力者によってPythonは大きな広がりを見せ、総てを習得することは逆に困難を招いているようです。ここではPythonの裾野をあまり広げ過ぎないようにして臨みたいと思います。


Pythonのインストール

https://www.python.org/

DounloadsタグからOS(例えばWindows)を選択してダウンロードを開始します。



途中で、Add Python PATH にチェックを入れてください。
Custamize installation でインストールするフォルダを指定します。
オプション指定で pip と tcl/tk をチェックしておきます。

インストール完了後、スタート→Windowsシステムツール→コマンドプロンプトで

C:\Users\.......>python

と入力すると

 Python 3.11.4 (tags/v3.11.4:d2340ef, Jun 7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] on win32
 Type "help", "copyright", "credits" or "license" for more information.
 >>>

のように表示されたらOKです。

インストールが完了したら Windows スタートマーク をクリックして、 Python →  Python3.XX を押さえてデスクトップにドラッグ&ドロップします。デスクトップには下のように、Command Promptと、Notepad と sakuraエディター なども用意しておくと便利でしょう。





Python を実行する

方法@: インタープリタを呼び出す
コマンドプロンプトから
 C:\Users\........>python
または
 C:\Users\......>py
と入力すると、インタープリタの入力プロンプト >>> が表示されるので

>>> print("Hello World")

のように直接プログラムを入力して実行します。

C言語のようにコンパイルしないで直接実行できるPythonはインタープリタ言語です。(後述しますがコンパイルしてexeファイルすることもできます)


方法A: スクリプトを書いて実行
スクリプト(プログラム原稿)を利用する方法です。
例えば、Dドライブの pyt というフォルダにスクリプトを作るには、

ExplolerでDドライブを選択して右クリック → 新規作成 → フォルダ → 「新しいフォルダー」をスクリプト保存用として 「pyt」 のように書き換えます。

Notepadまたはsakuraエディターを使ってスクリプトを作成します。

 print ("Hello, Python")

名前を付けて保存で、
test.py として d:\pyt に保存終了します。

コマンドプロンプトを起動して、

 c:\users\.......> d:      dドライブへ移動し(Cドライブの場合は不要です)
 d:\ >cd \pyt        チェンジディレクトリでプログラムのあるディレクトリへ移動して
 d:\pyt>py test.py      test.pyを実行します


あるいは、次のようなBATファイルをNotepadで作成し

d:
cd \pyt
py test.py
pause

これを test.bat というファイル名でセーブしておくと、エクスプローラーでこの test.bat をクリックすることで簡単にプログラムを実行することができます。



Python の入り口

print() とinput() 関数

よく使う print() 関数と、input() 関数です。
下のスクリプトを作り、上のAの方法でプログラムを実行してみてください。

st = input("文字を入力してください  ")
print("文字 ",st," が入力されました")

実行して ”ABC” と入力すると

D:\pyt>py test.py
文字を入力してください ABC
文字 ABC が入力されました

のような結果となるはずです。input()関数で変数 st に入力した文字列がprint()関数で出力されています。


print文のフォーマット
小数点以下3位まで表示
s = 123.45678
print("{:.3f}".format(s))

123.457

%を表示
print("{:% }".format(数値))

3桁毎にカンマを付ける
print("{:,}".format(123456789))


Python の文法

コメント(注釈)文
プログラムに関係しない参照コメント文は 

# シャープ記号から改行コードまではコメント

または、

''' このように
  三連シングルクォートに挟まれた総ての文字行はコメント
'''


文と、文のブロック
プログラムの命令である文(ステートメント)は、改行または ; (セミコロン)で区切ります。
一行に納まらない長い文は \(バックスラッシュ)改行コード で続行することができます。

一連の関連した文で構成されるブロックは : (コロン)で開始し、字下げ(インデント)をします。
ブロックの終了でインデントを戻します。

例)
x = 6                               # 単一文
y = 20                             # 単一文
if x > y:                            # 複合文 :ブロックを開始
    print("Xはyより大きい")       # 字下げしたブロック
    print("x=",x," y=",y)            # 字下げしたブロック
else:                               # インデント戻し、複合文 :でブロックを開始
    print("yはxより大きい")        # 字下げしたブロック
    print("y=",y," x=",x)            # 字下げしたブロック


if 文や for , while 文などで用いられる文のブロックは通常4スペースのインデント(字下げ)で行います。
ブロックの入れ子構造が深くなる毎に4スペースの字下げをします。

字下げ数は4に限定されている訳ではなく他の数でも可とされています。C言語のブロック記号である {  } や、他の言語で使われるend文などに比べ、一見、すっきりした手法と感じられます。しかし、構文の入れ子構造が複雑になって来ると、このコロンとインデントによる方法は混乱の原因となる危険性があります。特にブロックが2重3重の入れ子構造になる場合、ブロックの出口にインデントを付けた } があれば、対応する入り口のブロックと容易に対応が見分けられますが、Pythonでは手がかりが消えてしまうため要注意です。一例として後述のbreak文を参照してください。


データ型
変数の型宣言は不要、代入時に自動判断されます。

x = 100       # xはint型になる
x = 0b11000100 # 2進数
x = 0o777         # 8進数
x = 0xffff          # 16進数
x = 1234567890123456  # Long型(メモリの限り)
pi = 3.1415    # float型
x = 3.14j          # 虚数型
x = True           # または False    bool型
moji = "abcd"   # または moji='abcd' str型
x = [25,'zvd',3.1415]   # list型

データ型は
dt = 123.45
print(type(dt))
<class 'float'>
のように確かめることができます。

データ型は要注意
データ型が既に決まっていてもinput文などで再入力される場合は、
N = int(input( ))
のように型指定しないとエラーとなる場合があります。
型が自動決定されるという機能は便利そうで厄介な機能です。Cなどでは一回型宣言すれば型が勝手に変わることなどなく、型を変更したい場合のみキャスト(型はめ)することで良いのですが、pythonでは意図しないで型が変わってしまうことがあるためinputなどの操作の度に型指定しなければなりません。


エスケープ文字
キャリッジリターンCRやラインフィードLFなど、文字で書くことができないエスケープ文字は \(バックスラッシュ) で始まる下記の表記で表すことができます。

\\    # バックスラッシュ(日本語で円記号)
\'        # シングルクォート
\n    # LF
\r    # CR
\t    # タブ
\b    # バックスペース
\f     # フォームフィード
\x〇〇   # 16進値
\u〇〇〇  # 16ビットユニコード文字
\U〇〇〇  # 32ビットユニコード文字



リスト(配列)

一次元リスト
x = ['Hello', 'World', 9]
print(x)
['Hello', 'World', 9]


C = [1,2,3]
print(C[1])
2              # 配列は C[0]、C[1]、、のように生成される。



二次元リスト
ar = [
[0,2,3],
[10,11,12],
['aA','bB','cC']
]
print(ar[2][0])


空のリストに要素を追加する方法
ar = []          # 空のリストarを生成
ar.append(3)   # arに要素を1ケ追加
ar.append(5)
ar.append('A')
print(ar)


リストの名称を自動生成
for i in range(5):
ar = 'C' + str(i)
globals()[ar] = 123
print([C0])       # [123]


空の二次元リストを生成
# 空の2次元配列を二重のfor文 [[x] y] で作る
ar = [['' for x in range(4)] for y in range(9)]
ar[8][0] = '13.458'
print(ar)

# 結果
[['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['13.458', '', '', '']]


すべて0の二次元リストを作る
ar = [[0 for x in range(4)] for y in range(9)]



タプル(変更不可なリスト)
sk = ('shinji', 'kawasaki', 80)
print(sk)



辞書機能
english_words = {"apple": "りんご", "orange": "みかん", "peach": "もも"}
のように登録すると
print(english_words["apple"])


りんご

が得られる。



演算

算術演算子

+a      # 正数
-a      # 負数
a + b   # 加算
a - b   # 減算
a * b   # 乗算
a / b   # 除算
a % b   # a を b で割った余り
a ** b   # a の b 乗
a // b   # 切り捨て除算


ビット演算子

~a        # ビット反転
a & b    # AND:論理積(aもbも1のビットが1)
a | b     # OR:論理和(aまたはbが1のビットが1)
a ^ b    # XOR:排他的論理和(aまたはbが1のビットが1)
a << b  # b ビット左シフト
a >> b  # b ビット右シフト


代入演算子
a = b       # a に b を代入する
a += b     # a = a + b に同じ
a -= b     # a = a - b に同じ
a *= b     # a = a * b に同じ
a /= b     # a = a / b に同じ
a %= b     # a = a % b に同じ
a **= b    # a = a ** b に同じ
a //= b    # a = a // b に同じ
a &= b     # a = a & b に同じ
a |= b      # a = a | b に同じ
a ^= b      # a = a ^ b に同じ
a <<= b    # a = a << b に同じ
a >>= b    # a = a >> b に同じ


比較演算子
a == b     # a が b と等しい
a != b      # a が b と異なる
a < b      # a が b よりも小さい
a > b       # a が b よりも大きい
a <= b     # a が b 以下である
a >= b     # a が b 以上である
a is b      # a が b と等しい
a is not b   # a が b と異なる
a in b        # a が b に含まれる (a, b は共に文字列/b はリストやタプル)
a not in b   # a が b に含まれない (a, b は共に文字列/b はリストやタプル)


ブール演算子
a and b     # a も b も真であれば真
a or b      # a または b が真であれば真
not a       # a が偽であれば真


文字列演算
str1 + str2   # 文字列 str1 と 文字列 str2 を連結
str * 5      # 文字列 str を 5回繰り返す
str[n]       # 文字列 str の中の n 番目の文字を取り出し
syr[n:m]     # 文字列 str の中の n 番目から m 番目までの文字列を取り出し
str[n:]       # 文字列 str の中の n 番目から最後までの文字列を取り出し
str[:m]      # 文字列 str の中の 0 番目から m 番目までの文字列を取り出し
str[n:m:s]   # 文字列 str の中の n 番目から m 番目までの文字列を s個とばしで取り出し

分岐

if [elif] [else] 文
if 条件式1:          # もし〜だったら
    条件式1が真の時に実行する文
    ...
elif 条件式2:          # で無く〜だったら
    条件式1が偽で条件式2が真の時に実行する文
    ...
elif 条件式3:          # で無く〜だったら
    条件式1及び条件式2が偽で条件式3が真の時に実行する文
    ...
else:                    # で無かったら
    すべての条件式が偽のときに実行する文
    ...


x = 'A'
y = 3
if(x == y):
    print("Yes")
else:
    print("No")

実行結果は
No

while [ else] 文
n = 0
while n < 10:      # 条件が成立する間は
    print(n)               # 実行
    n += 1                # 実行
else:                # 条件が成立しない間は
    print('END')          # 実行

実行結果は
0
1
2
3
4
5
6
7
8
9
END


for in 文ループ
   # の間
for n in [1, 2, 3]:      # 配列
    print(n)              # 1, 2, 3

for n in (1, 2, 3):      # タプル
    print(n)              # 1, 2, 3

for c in "ABC":       # 文字列
    print(c)              # A, B, C

for k in {'one': 1, 'two': 2, 'three': 3}:     # 辞書
    print(k)               # one, two, three

for line in open("sample.txt"):   # ファイルの中身
    print(line)


for文の中で使う range() 関数
for num in range(5):     
    print(num)           # 0から5の手前の4 までがプリントされる

for num in range(5,10):
    print(num)          # 5から10の手前の9までがプリントされる。

for num in range(0,10,3):    # (初期値,未満,増加量)
    print(num           # 0,3,6,9 がプリントされる。


小数点を使う for文
range関数は整数しか使えないため小数点以下のfor文は以下のような関数を使います。
リストを追加するappendメソッドを使ってます。

def frange(start, end, step):
    dat = [start]
    n = start
    while n + step < end:
        n = n + step
        dat.append(n)
    return dat

for i in frange(0.0, 1.0, 0.05):
    print(format(i, '.2f'))

実行結果は
0.00
0.05
0.10
0.15
0.20

、、、、、

0.85
0.90
0.95


break ループを抜ける 
num = 0     #例
while True:
    print("num = " + str(num))
    num += 1
if num >= 2:
    break

print("End")


深いネスティングのループから抜け出すには、フラグを利用する方法があります。

bflag = False           # フラグリセット
for ,,,,,, :                 # ループA
    for ,,,,,,, :                # ループB
        if ,,,,,, :                   # ループB抜け出し条件okなら
            bflag = True            # フラグを立てて
            break                     # ループB抜け出し
    if bflag:                 # フラグが立っていたら
        break                   # ループA抜け出し

c言語ではループ出口の } が見えますが、Pythonでは見えないので、上例のように注意して対応するループ出口のインデント位置にフラグ検出の if を入れてbreakします。


入力値が範囲内になるまで入力を繰り返す
while True:       # if 条件 then break で抜けるまで繰り返すループ
    tmp = int(input("値は "))
    if 10 <= tmp <= 20:
        C[i] = tmp
        break         # 範囲内
    else:
        print("範囲外です ")


入力データが数値か否か調べる
Q = input("OK:y  修正:番号 ")
if Q.isdigit():       # 数値なら 検査変数.isdigit() は true
    print("修正する番号は ")
else:
    print("計算します")


関数を定義する
def add(x, y):
    ans = x + y
    return ans

n = add(3, 5)
print(n)

注)Pythonはインタプリタ言語ですから、その関数が実行される以前に定義されている必要があるため、def文は通常プログラムの頭に書いておきます。



キーワード引数
def repeat_msg(msg, repeat=3):
    for i in range(repeat):
        print(msg)

repeat_msg('Hello')     # Hello, Hello, Hello
repeat_msg('Yahho', repeat=5)     # Yahho, Yahho, Yahho, Yahho, Yahho

引数に * を指定すると、* より後ろの引数はキーワード専用引数とみなされる

def func(a, b, *, c):
    print("a=%s, b=%s, c=%s" % (a, b, c))

func("A", "B", c="C") # a=A, b=B, c=C
func("A", "B", "C")



グローバル変数ローカル変数
関数外で定義した変数をグローバル変数、関数内で定義した変数をローカル変数と呼びます。
関数内からグローバル変数を参照することはできますが、関数外からローカル変数を参照することはできません


ラムダ式
c言語のマクロに似ているのがラムダ式です。簡単な関数のように使うことができます。

myfunc = lambda x, y: x + y
print(myfunc(3, 5))


set() で集合を作る

集合を作る

set([1,2,3,4,5])
set({'dog':'inu', 'cat':'neko', 'bird':'tori'})


要素数を得る
s = set([1,2,3])
len(s)


要素の追加、クリヤ
s = set()      # 空のセットを生成(set([]))
s.add(1)       # set([1])
s.add(2)       # set([1, 2])
s.add(3)       # set([1, 2, 3])
s.remove(2)  # set([1, 3])
s.clear()


論理演算
s1 = set([10, 20, 30, 40, 50])
s2 = set([10, 30, 50, 70, 90])
s3 = set([10, 20, 30])

s1 | s2     # 和集合を求める set([10, 20, 30, 40, 50, 70, 90])
s1 & s2    # 積集合を求める set([10, 30, 50])
s1 - s2    # 差集合を求める set([20, 40])

s3.issubset(s1) #部分集合であればTrueを返す、またはfalse

s.discard(1)    # 集合sから要素 1 を削除

s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}

差集合
print(s1 - s2)
# {0}

print(s1.difference(s2))
# {0}

print(s1.difference(s2, s3))
# {0}


対称差集合(一方にだけ含まれる要素)
s1 = {0, 1, 2}
s2 = {1, 2, 3}
s3 = {2, 3, 4}

print(s1 ^ s2)  # ^演算子
# {0, 3}

print(s1.symmetric_difference(s2))
# {0, 3}

累算代入は^=演算子およびsymmetric_difference_update()メソッド。


部分集合 <=演算子, issubset()
s1 = {0, 1}
s2 = {0, 1, 2, 3}

print(s1 <= s2)
# True

print(s1.issubset(s2))
# True


上位集合か判定: >=演算子, issuperset()
s1 = {0, 1}
s2 = {0, 1, 2, 3}

print(s2 >= s1)
# True

print(s2.issuperset(s1))
# True


isdisjoint() 共通のない素集合判定
s1 = {0, 1}
s2 = {1, 2}
s3 = {2, 3}

print(s1.isdisjoint(s2))
# False

print(s1.isdisjoint(s3))
# True


クラス

プログラミングの対象が「人」の場合、「名前」「身長」「体重」などの属性と、人の行為「走る」「止まる」などの方法(メソッド)を組み合わせることで「人」を多面的に扱うことができる。

class ObjName:
    def __init__(self, 属性1, 属性2, ...):       # 初期化関数の定義
        self.属性1 = 属性1  #変数1
        self.属性1 = 属性1  #変数2

    def メソッド1(self, ...):                      # メソッド1の処理内容
    def メソッド2(self, ...):                      # メソッド2の処理内容

クラスを使用する例
class Man:
    def __init__(self,name,height,weight):
        self.name = name
        self.height = height
        self.weight = weight

    def run(self,):
        print("は走ります")

    def stop(self,):
        print("は止まります")

#
tanaka = Man("田中",170,50)
suzuki = Man("鈴木",165,62)

#
print(tanaka.name)
print("体重",tanaka.weight,"kg")
print("身長",tanaka.height,"cm")
tanaka.run()

print(suzuki.name)
print("体重",suzuki.weight,"kg")
print("身長",suzuki.height,"cm")
suzuki.stop()

結果)
田中
体重 50 kg
身長 170 cm
は走ります
鈴木
体重 62 kg
身長 165 cm
は止まります


主な組み込み関数

abs()     # 数の絶対値を返す

len()        # 文字数 / 配列要素数 を返す

max()       # ()の値の最大値を返す

min()        # ()の値の最小値を返す

round()      # 丸めた値を返す

print(round(3.14))   # 「3.14」を丸めた結果を返す

print(round(12.345, ndigits=2))   # 小数点以下2桁で丸めた結果を返す

sum()
    ls = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]   # lsという変数に、リストを保持
    print(sum(ls))              # ls(リスト)内の要素の合計を表示する
    print(sum(ls, 100))       # ls内の要素に100足した合計を表示する
    print(sum(ls, start=5))   # 5とls内の要素を足した合計を表示する

float()        # ()内の値を浮動小数点の値に変換

int()          # ()内の値を整数に変換

list()           # ()内の要素をリストに変換
    print(list("Python"))     # 文字列(Python)をリストに変換して表示
    print(list(("テスト", 123, False)))    # タプルをリストに変換して表示
    print(list({"key1": "テスト", "key2": 123}))   # 辞書をリストに変換して表示
    ['P', 'y', 't', 'h', 'o', 'n']
    ['テスト', 123, False]
    ['key1', 'key2']

str()       #文字列に変換
    num = str(123)      # numという変数に、数値(123)を文字列に変換して保持
    print(num)            # numの中身(文字列)を表示

tuple()             # タプルへ変換
    print(tuple("Python"))      # 文字列(Python)をタプルに変換して表示
    print(tuple(["テスト", 123, False]))     # リストをタプルに変換して表示
    print(tuple({"key1": "テスト", "key2": 123}))      # 辞書をタプルに変換して表示
    ('P', 'y', 't', 'h', 'o', 'n')
    ('テスト', 123, False)
    ('key1', 'key2')

type()           # データ型を確認
    print("123", type("123"))     # 文字列(123)と、そのデータ型を表示
    print(123, type(123))           # 数値(123)と、そのデータ型を表示
    123 <class 'str'>
    123 <class 'int'>

ord('a')      # 97 アスキーコード変換

chr(97)    # 'a' アスキーコード逆変換



Beepo音を鳴らす
print("\007")





プログラムのexe化

@installerを使う
pip imstall pyinstaller
pyinstaller prg.py --onefile

これでdistフォルダ下に exeが生成される。
注) ソースはUTF-8で作ること
コンパクトなexeを得る方法は他にもある。

Apy2exe を使う
次のスクリプトsetup.py を用意する

from distutils.core import setup
import py2exe
setup(console=['EXE化するPythonファイル.py'])

これで
pip install py2exe
python setup.py py2exe

以上で dist フォルダに必用なモジュールができるのでzipして配布
ただし先方にVisial CのランタイムDLLが必要


import モジュール (ライブラリ)の読み込み)

import os          # ファイル操作
import sys    # インタプリタおよび実行環境
import datetime   # 日付時刻関数
import csv        # csvファイル
impory math     # 数学計算
import random    # 乱数
import email      # Eメール
import pandas    # データ解析
import matplotlib    # データ解析可視化
import sklearn      # 機械学習
import time        # 時間計測

注) .pyで書かれたファイルがモジュール。このモジュール全体を使うのが import。
モジュールの一部だけを使うのが from


time 時間
import time         # 時間管理モジュールの読み込み

time.sleep(sec)    # 時間待ち
time.ctime()        # 時刻データ




math 数学
import math       # mathモジュールの読み込み
print(math.pi)     # 円周率
3.141592653589793

math.e            # 自然対数の底
math.ceil(1.05)      # 1.05より大きな整数
math.comb(n,k)      # n個からk個を選ぶ組合せ数
math.fabs(-1.23)    # => 1.23 絶対値
math.factorial(10)   # => 3628800 階乗
math.floor(5.1)       # => 5 以下の最大の整数 
math.fmod( x, y)    # xをYで割った余り
math.frexp(1.5)     # => (0.75, 1) 仮数と指数の組(m, e)を取得
math.pow(x,y)        # xのy乗
math.sqrt(x)          # 平方根
math.log(x)           # 自然対数
math.log(x, y)        # yを低とする対数
math.log10(x)        # 常用対数
math.sin(v)           # sin
math.cos(x)          # cos
math.tan()            # tan
math.asin()           # asin
math.acos()          # acos
math.atan()          # atan
math.radians(x)     # 度→ラジアン変換
math.degrees(x)    # ラジアン→度変換


符号を得る
import math
d = -1.254
print(math.copysign(1,d))
結果 -1.0



ファイル操作

新規ファイル書き込み
import os                # 別モジュール os の読み込み
os.chdir("d:/temp")   #ディレクトリをd:\tempに変更
f = "t.txt"               #ファイル名をfに代入
fb = open(f, "w", encoding = "utf_8")     #書き込みファイルfをfbとしてオープン
fb.write("こんにちは\n")                      # fbに1行書込み
fb.write("今日は台風です")                  # fbに1行書込み
fb.close()                # fbクローズ


ファイル読み取り
import os
os.chdir("d:/temp")
f = open("t.txt", "r",encoding = "utf_8")
for line in f:
    print(line)
f.close()


ファイルの削除
import os
os.chdir("d:/temp")
os.remove("t.txt")


バイナリファイル

書込み
import os
os.chdir("d:/pyt")
with open('test.bin','wb') as f: #バイナリ書き込み: wb
    s = "\x01\x02\x03"
    b = s.encode()
    f.write(b)
f.close()

読み込み
import os
os.chdir("d:/pyt")
with open('test.bin', 'rb') as f: #バイナリ読み込み: wb
    b = f.read()
    s = b.decode()
print(s)
f.close()


tkinker グラフィックインターフェース

ウィンドウ
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("はじめてのtkinter")
##ウィンドウの表示
root.mainloop()

これでroot ができるので以降は root=TK() から内容を定義する


ラベル
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("はじめてのtkinter")
label = ttk.Label(root,text ='Hello Python!')
label.pack()





入力BOX
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("はじめてのtkinter")
#オブジェクトの定義
label = ttk.Label(root,text ='Hello Python!')
entry = ttk.Entry(root)
#レイアウト
label.pack()
entry.pack()
#ウィンドウの表示
root.mainloop()





OKボタン
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("はじめてのtkinter")
#オブジェクトの定義
label = ttk.Label(root,text ='Hello Python!')
entry = ttk.Entry(root)
button = ttk.Button(root,text = 'OK')
#レイアウト
label.pack()
entry.pack()
button.pack()
#ウィンドウの表示
root.mainloop()





コンボボックス
from tkinter import *
import tkinter as tk
import tkinter.messagebox as mb
import tkinter.ttk as ttk
#1---windowの作成
root = Tk()
root.title("Test")
root.configure(bg="#fffbdb")
root.geometry('640x480')

#2---プルダウン作成
option = [".bat", ".csv", ".xlsx", ".txt"]
variable = tk.StringVar()
combo=ttk.Combobox(root,values=option,textvariable=variable)
combo.bind("<<ComboboxSelected>>")
combo.pack()

root.mainloop()



テキストボックス
import tkinter as tk

# メインウィンドウを作成
baseGround = tk.Tk()
# ウィンドウのサイズを設定
baseGround.geometry('500x300')
# 画面タイトル
baseGround.title('テキストボックスの値を取得する')

# ラベル
label1 = tk.Label(text='テキストボックス1')
label1.place(x=30, y=40)

label2 = tk.Label(text='テキストボックス2')
label2.place(x=30, y=90)

# テキストボックス
textBox1 = tk.Entry(width=40)
textBox1.place(x=30, y=60)

textBox2 = tk.Entry()
textBox2.place(x=30, y=120)

def val():
    # テキストボックスの値を取得
    print(textBox1.get())
    print(textBox2.get())

# ボタンの作成と配置
button = tk.Button(baseGround,
                text = 'OK',
                # クリック時にval()関数を呼ぶ
                command = val
                ).place(x=30, y=180)

baseGround.mainloop()





ェックボック
import tkinter

# Tkクラス生成
tki = tkinter.Tk()
# 画面サイズ
tki.geometry('300x200')
# 画面タイトル
tki.title('チェックボタン')

# チェックボタンのラベルをリスト化する
chk_txt = ['Pythonを使用する','Javaを使用する','C#を使用する']
# チェックボックスON/OFFの状態
chk_bln = {}

# チェックボタンを動的に作成して配置
for i in range(len(chk_txt)):
    chk_bln[i] = tkinter.BooleanVar()
    chk = tkinter.Checkbutton(tki, variable=chk_bln[i], text=chk_txt[i])
    chk.place(x=50, y=30 + (i * 24))

# ボタンクリックイベント(チェック有無をセット)
def btn_click(bln):
    for i in range(len(chk_bln)):
        chk_bln[i].set(bln)

# ボタン作成
btn = tkinter.Button(tki, text='ONにする', command=lambda:btn_click(True))
btn.place(x=80, y=170)
btn = tkinter.Button(tki, text='OFFにする', command=lambda:btn_click(False))
btn.place(x=150, y=170)



複数ボタン配置とクリックイベント
import tkinter
from functools import partial

tk_root = tkinter.Tk()
frame_main = tkinter.Frame(tk_root)
frame_main.grid()

def on_click(num):
    print("クリック %d" % num)

for i in range(9):
    button = tkinter.Button(frame_main, text=i, command=partial(on_click, i))
    button.grid(row=0, column=i)

tk_root.mainloop()










アクセスカウンター









inserted by FC2 system