なりなり日記

Appleと折りたたみ自転車(BROMPTON / Tern Vektron S10 / BESV PSF1)の情報を中心に発信中!

【Python入門】tkinkerでタイマーを作る

こんにちは、なりなりです(^ ^)

【Python入門】Pythonistaでタイマーを作る(2) - なりなり日記

Pythonistaでのタイマーの使い方を勉強しましたが、一度脱線して、PCならどうするのか?やってみます(^-^)

TKと聞けば、プラグラムに詳しい人はピンと来ますよね、きっと。僕は知りませんでしたけど。

PythonにはGUIを構築するためのモジュールTKが標準で組み込まれているのです。

僕はGUIとかイベントドリブン型のプラグラムは、ポーランドのC++ Builder(Visual BASICのC++版といいましょうか)でしか組んだことが無いので、ソースコードだけで書くというのがピンと来ないんです(⌒-⌒; )

tkinkerを使ったタイマーの例がこちら。

# coding: utf-8

from tkinter import *

def timer():
   time = int(buff.get())
   if time > 0:
       frame.after(1000, timer)
       time -= 1
       buff.set(str(time))

frame = Tk()

buff = StringVar()
buff.set('10')

entry  = Entry(frame, textvariable = buff)
entry.pack(side='left')
button = Button(frame, text = 'START', command = timer)
button.pack(side='right')

frame.mainloop()

一番上の方に定義したtimer関数の中に有りますが、tkにはthreadingのTimerに似たメソッドafterが有るので、threadingは不要です。

今回は、tkinkerの中のテキスト入力ボックスのEntryとButtonのウィジェットを使います。

では、インタラクティブモードでウィジェットが出来上がる様子を見ましょう!

frame = Tk()

でtkのインスタンスframeを生成し


buff = StringVar()
buff.set('10')

tkのウィジェットと文字列をやりとりするにはStringVarでインスタンスを生成します。ここではsetメソッドで10に初期化。

entry  = Entry(frame, textvariable = buff)
entry.pack(side='left')

frame上にEntryのインスタンスを生成し、textvariable(変化する文字列)にbuffを関連付けてから、frameに詰め込んで表示(pack)します。この時、Entryは左に配置。


するとこうなります。

更に、

button = Button(frame, text = 'START', command = timer)
button.pack(side='right')

Buttonのテキストに「START」を指定して、ボタンを押した時のコール関数に「timer」を紐付けて、frame上にインスタンスを生成します。Buttonは右に配置。


するとこうなり、mainloopの実行でボタン押し待ちの状態になります。


こんな感じに、ソースコードだけでGUIとかイベントドリブン型のプラグラムとか作れるんですね。


実は、この辺の感覚が無かったので

初めてのGARMIN Connect IQプログラミング vol.3【基礎編】 - なりなり日記

GARMIN Connect IQのプログラミングが暗礁に乗り上げてしまったのですが、ひょっとして再開出来るかも!

追記

Windows上で.pyをPythonに関連付けてある場合、ダブルクリックでプログラムが起動しますが、同時にShell Windowが開いてしまって鬱陶しいです。

この場合、拡張子を.pywにするだけで解決します!

.pyはpython.exeに、.pywはpythonw.exeに関連付けられていることに依るようですが、詳細は分かりません(⌒-⌒; )

VBS(Visual BASIC Script)を使う手も有るようですが、拡張子変更の方が遥かに簡単ですね(^-^)

【Python入門】Pythonistaでタイマーを作る(2)

こんにちは、なりなりです(^ ^)

Pythonista 3

Pythonista 3

  • omz:software
  • 仕事効率化
  • ¥1,220


【Python入門】Pythonistaでタイマーを作る(1) - なりなり日記

前回、Text Fieldの表示が更新されないという問題にぶつかりましたが、これには、スレッドを使うのが良いようです。

import ui
import threading

def count_down(textfield):
  global times
	
  if times > 0:
    t = threading.Timer(1, count_down,args=[textfield])
    t.start()
    times -= 1
    textfield.text = str(times)
	
def button_tapped(sender):
  global times
	
  textfield = sender.superview['textfield1']
  times = int(textfield.text)
  count_down(textfield)
		
v = ui.load_view()
v.present('sheet')


キーとなるのが

import threading

threadingモジュールのインポートです。

t = threading.Timer(1, count_down,args=[textfield])

その中のTimerメソッドで1秒後に自分自身の関数を再帰的に呼び出すことで、繰り返し実行されます。

Timerメソッドは「args=」で呼び出す関数の引数を指定出来ますが、似たようなメソッドで引数指定出来ないものも有るので、常に

threading.Timer(1, lambda:count_down(textfield))

この様にラムダ式を使った方がスマートかもしれません。

さあ、これで、タイマーの基本的は作り方が分かりましたね(^-^)


【Python入門】tkinkerでタイマーを作る - なりなり日記

続きはこちらですが、一回、脱線します!

テニスファン待望!?WOWOWがオンライン解約出来るようになった!

こんにちは、なりなりです(^ ^)

テニスファンならWOWOWとGAORAを上手く解約・再加入して視聴料を節約しよう! - なりなり日記

以前、こんなエントリーを書きまして、ただいま全米オープン開催中ですが、これが終わった後、1月の全豪オープンまで、僕的にはWOWOWを契約している意味が無いので解約手続きをしようとしました。

月末最終日の23:55分より前なら、月内のいつ解約しても翌月解約となるので、解約を決めているなら、忘れないうちに解約した方が良いのです。

ということで、僕はリマインダーに登録してあります。


ああ、でもまた、コールセンターのお姉さんに色々聞かれるんだろうなぁ。

せめて、

  • WOWOWオンデマンドアプリは、いつになったらAirPlay対応するのか?
  • ATPツアーも放送してくれ
  • オンライン解約に対応してくれ

くらいは、いつも通り言ってやろう

と思いつつ、ひょっとしてオンライン解約出来ないだろうか?と検索してみると、


解約方法|お客さまサポート | WOWOWオンライン

何だぁ、出来てるじゃないですか!

でも、解約にはB-CASカードが必要なので、帰ってからやります(^-^)

【Python入門】Pythonistaでタイマーを作る(1)

こんにちは、なりなりです(^ ^)

Pythonista 3

Pythonista 3

  • omz:software
  • 仕事効率化
  • ¥1,220

さて、Pythonの基本的な文法がわかったところで、いよいよプログラミングします。

今回はiPhoneのPythonアプリ、Pythonistaでプログラミングです(^-^)


タイトル通り、タイマーを作るのですが、まずは基本的な

  • UIの作り方と使い方
  • 1秒毎にカウントダウンする方法

を勉強します。


最初のプログラムの完成形はこちら。

テキストボックスに数値を入れてSTARTボタンを押すと、0までカウントダウンします。

簡単そうですが、意外と苦戦しました(⌒-⌒; )

実験1

まずはインタラクティブモードで実験です。

要は、ループの中で1秒ウェイトがかかれば良いのですよね。

>>> from time import *
>>> times=10
>>> while times > 0:
...   print(times)
...   times -= 1
...   sleep(1)
...   
9
8
7
6
5
4
3
2
1

これは、timeモジュールの中のsleep関数を使ったものです。sleepの引数は秒です。

1秒毎に変数timesがカウントダウンされる様子が見れるので、これが使えると思いました。

実験2

実験1の方法にUIを組込んでみます。

ここで+ボタンを押して


Script with UIを選び


ファイル名を入れたらCreateを押すと


ソースファイル.pyとUIのデザインファイル.pyuiが生成されます。


こちら、.py


こちら、.pyuiです。

まず、.pyuiで+ボタンを押して


Text FieldウィジェットとButtonウィジェットを配置します。ドラッグして、位置とサイズを適当に調整したら、ウィジェットを選択した状態で右上のiボタンを押してプロパティを編集します。


ここでは、Text FieldのTextとButtonのTitleを編集したら、再びiボタンを押します。


するとこうなって、取り敢えずUIは完成!

あ、いや、もう1つ、ButtonのActionにbutton_tappedを入力します。これは、ボタンを押した時に実行する関数名です。

import ui
import time

def button_tapped(sender):
	textfield = sender.superview['textfield1']
	
	times = int(textfield.text)
	
	while times > 0:
		time.sleep(1)
		times -= 1
		textfield.text = str(times)
		
v = ui.load_view()
v.present('sheet')

.pyのソースコードは、この様に変更します。


ボタンをタップした時に呼ぶ関数button_tappedは引数にsenderを持たせます。

sender.superview['textfield1']によって、sender(Button)の外のスコープにあるtextfield1という名前のウィジェットを返します。

これのTextプロパティにtimes変数をカウントダウンしながら代入するプログラムなのですが、


スタートボタンを押すと表示が固まってしまい。


カウントダウンが終わると、ようやく表示が更新されます。


うーん、これではダメだ。
ウィジェットの表示を定期的に更新するには、他の手段が必要な様です。

といことで、次回に続きます。


【Python入門】Pythonistaでタイマーを作る(2) - なりなり日記

続きはこちら!

9/30から東海道・山陽新幹線のチケットがネットで買ってSuicaで使えるようになる!

こんにちは、なりなりです(^ ^)

正直、やっとかよというサービスですけどね。

http://jr-central.co.jp/ex/#s1http://jr-central.co.jp/ex/#s1

これに伴って、現在、年会費が必要なサービスとして提供されているEX予約は消滅する(スマートEXに統合される)ようです。


スマートフォンでの登録方法 | スマートEXとは | スマートEX

何故かモバイルSuicaに関する言及が無いのですが、こちら、「スマートフォンでの登録方法」の「交通系ICカード情報入力」によると

登録済の交通系ICカードを別の会員が登録することはできません。エクスプレス予約会員で登録しているモバイルSuicaとの重複登録もできません。

と書かれており、モバイルSuicaでも使えそうな雰囲気です。

流石に使えると思いたいですが、登録も9/30からということです。


JR東日本も、とっとと対応よろしく!

【Python入門】オブジェクト・クラス・インスタンス

こんにちは、なりなりです(^ ^)

僕が初めてオブジェクト指向のプログラミング言語に触れたのはC++でしたが、オブジェクトの説明を見ると、「世の中の物は全てオブジェクトであり...」など、何か話が難しそうだし、出てくる言葉に馴染みが無いために逃亡したくなりがちです。

でも、そうすると後々困るし、いうほど難しくないし、クラスは作らないにしても使わないことはあり得ないので、Pythonのオブジェクト(Object)について、簡単にまとめておきます。


5分で絶対に分かるオブジェクト指向:5分で絶対に分かる(1/6 ページ) - ITmedia エンタープライズ
オブジェクトについて、この説明は分かりやすいかも。


Pythonのオブジェクトの作りは下記の様になっており、C++と大差ありません(スマホの場合、横表示にすると見やすい)。

オブジェクト(Object)
|ークラス(Class)  : オブジェクトの宣言
|  |ープロパティ(Property)    クラスのメンバー変数
|  |  |ークラス変数     クラス共通で存在
|  |  |ーインスタンス変数  インスタンスごとに存在
|  |ーコンストラクタ(Constructor) メンバー変数の初期化
|  |ーメソッド(Method)      クラスのメンバー関数
|
|ーインスタンス(Instance) : オブジェクトの例(実体)

クラスはオブジェクトの定義であり、その実体をインスタンスと呼びます。

クラスについては、クラスと聞いて誰もが思い浮かぶ、学校のクラスをイメージすればいいです。

クラスのメンバーには名前、性別、年齢などの特性(Property)と変数が有り、プロパティにはクラスの人数といったクラス全体で共通のクラス変数と個々のメンバーの変数であるインスタンス変数が有ります。

インスタンス変数が不定とならないようにコンストラクタで初期化するのが通例であり、特性を知る手段(Method)が有ります(名簿を見るとか)。


簡単なクラスの宣言例が下記です。

class MyClass:             #クラス名の先頭は大文字が慣習
 """クラスの説明"""
 number = 40              #クラス変数の初期化

 def __init__(self):      #コンストラクタ関数名は決められている
   self.name = ""         #インスタンス変数の初期化
   #self.gender = ""      #追加予定のインスタンス変数
   #self.age = ""         #追加予定のインスタンス変数

 def getName(self):       #インスタンス変数を表示するメソッド
   return self.name

 def setName(self, name): #インスタンス変数を変更するメソッド
   self.name = name

モジュールの冒頭、クラスの冒頭、関数の先頭に三重クォート """...""" で記述したコメントは、ドキュメントストリング と呼ばれ、モジュールオブジェクト、クラスオブジェクト、関数オブジェクトの__doc__アトリビュートで参照できて、例えば

 >>> print(MyClass.__doc__)
 'クラスの説明'

 といった具合。

定義したクラスの使い方としては、

taro = MyClass()           #taroをインスタンスとして生成

taro.setName("Yamada Taro") #taroの名前を"Yamada Taro"に設定
print(taro.getName())       #taroの名前を出力

といった具合。

こうして整理してみると、それ程難しくありませんよね。


今回で、Pythonの文法的なお勉強はお仕舞いにして、プログラミングの過程で知らないことが出てきたら、都度勉強します。

プログラミングは、あまり根を詰めて文法の勉強すると途中で嫌になりますから(英語の勉強に似てる)、ざっくり理解したら、興味の有るプログラムを実際に組んでみるのが一番です。

逆に、仕事上でも、プライベートでも構いませんが、作ってみたいプログラムが思い浮かばない人は、プログラミングを習得するのは難しいです。


僕の場合は、取り敢えず

  • とっかかりとして、iPhoneの標準タイマーに無い、秒数の指定出来るタイマー
  • iPhone同士のBluetoothトランシーバ(奥さんとのサイクリングで使いたい)
  • 川崎市のテニスコートの空きを調べるプログラム(ホームページがアホで使いにくいから。Java Scriptでもやってみる)
  • 仕事で使うプログラムのとっかかりとして、FIRフィルタ係数計算プログラム
  • FIRフィルタ係数プログラムで使いたい固定小数点クラス
  • 仕事で使い出したマイコン(PSoC)と通信するプログラム(合わせてPSoCの勉強も)
  • PSoC 4Lの評価ボードとiPhoneでBLE通信するPythonistaプログラム

などを作る予定です。

久しぶりにプログラムに触れて、ちょっと楽しくなってます。ソフトはハードより敷居が低いのが良いです(^-^)

AirMac Expressを購入しました!

こんにちは、なりなりです(^ ^)

我が家のWi-FiルーターはAppleのTime Capsuleなのですが、先週あたりからオレンジLEDが点灯することが増えて、家でWi-Fiが繋がらない頻度が急に上がりました。

Time Capsuleは購入後8年ほど経っているため、そろそろ寿命か?と思ったのですが、せっかく買ったものの、やは購入後8年MacBookが調子悪くなることは一度も無く、バックアップ機能の必要性を感じなくなっていたため

AirMac Expressを購入しました。


こちらパッケージ。よく分からないと思いますが、とてもコンパクトです。


本体に同梱されているのは、簡単な取説と電源ケーブルのみですが、大きさが分かるようにiPhone 5を置いてみました。


正面にはLEDのみ


背面にはETHERが2ポートとUSB、ACコネクタのみです。

ETHERはWAN側で1つ必須なので、LAN接続は1ポートのみとなります。


Time Capsuleと比較するとコンパクトさがよく分かりますね。


PCレスで、iPhoneから新しいAirMac Expressを検出して設定できます。


特に悩むことは無いはずですよ(^-^)


ただ…問題が解決しません。

切り分けていったところ、なんと、マンションの回線から宅内に引き込んだところにある、玄関に置いておるルーターが壊れかけていたようです。

ルーターを買ってきて交換したら解決しました(⌒-⌒; )


結局、AirMac Expressは要らなかったのですが、元々、ベッドルームのWi-Fiの入りが悪かったので、ベッドルームに置いて使うことにしました。

MacBookのバッテリーもいまだ健在ですし、Apple製品は多少割高ですが丈夫ですよね。

【Python入門】リテラル・変数・コメントアウト

こんにちは、なりなりです(^ ^)

今回はPythonの文法の基礎として、リテラル、変数、コメントアウトについて勉強しましょう!

リテラルとは

リテラルとは、プログラムのソースコードにおいて使用される、数値や文字列を直接に記述した定数のことです。

じゃあ、定数と呼べばいいじゃないかという話は置いときます(⌒-⌒; )

数値リテラル

数値リテラルは

  • 真理値(True, False)
  • 整数
  • 浮動小数点数
  • 複素数

の4種類とシンプル。文系の人は複素数も必要無いでしょう。

10進数の整数は説明不要ですよね。

これも文系の人には馴染みが薄いかもしれませんが、Pythonでは2進数(bynary)、8進数(Octal)、16進数(hexadecimal)の表記が素直で、それぞれ数値の前に"0b"、"0o"、"0x"を付ければOKです。

また、10進数をそれぞれに変換して文字列として返す関数、bin()、oct()、hex()も有り、これらを使って10進数の12を変換すると、

>>> bin(12)
'0b1100'
>>> oct(12)
'0o14'
>>> hex(12)
'0xc'
>>> 0xc
12

となります。

単純にoctaやhexaを入力してやるとdec(10進)に変換してくれます。

>>> bin(-1)
'-0b1'

負の数を2進数表現すると、ハードウェアのエンジニア的には残念な表示になります。

LSIなどで演算する場合は、通常は固定小数点型で、符号付き整数は2の補数で表します。

この場合、-1は4ビットの整数なら0bF、8ビットなら0bFFになるんです。

と言うわけで、そのうち固定小数点型を自分の手で作ることになりそうです。

Pythonも演算子のオーバーロードが出来るようなので、過去にC++で作った固定小数点型をPython化すると思います。

文字列リテラル

"文字列"
'文字列'

として表し、'(シングルクオーテーション)と"(ダブルクオーテーション)の区別は有りません。

CやExcelでは半角1文字は'で囲む「文字」、全角又は半角2文字以上は"で囲む「文字列」で慣れているので、気持ち悪く感じる人は多い気がします。

要するに、Pythonには文字列しかなく、文字というリテラルが無いのです。

変数

変数宣言

Pythonには昔のBASICよろしく、変数宣言がありません。これには、C言語やJAVAをはじめとした言語を知っている大半のプログラマーが違和感を覚えるでしょう。

その変数の型は、最初に入力された値で決まるのですから。僕も変数宣言は有った方が良いように感じます。

変数の型

Pythonに標準で用意されている型、組込み型には

  • 真理値型
  • 整数型
  • 浮動小数点型
  • 複素数型
  • 文字列型
  • リスト型
  • 辞書型

などが有ります。

文字列型まではリテラルと同じで、定数が変数になっただけ。

リストによく似たものにタプルという聞きなれないものも有りますが、リストと違って

  • 一度定義された要素を変更出来ない
  • 各要素の型は別々(数値と文字列とか)で構わない

といった特徴が有ります。

変更出来ないので、いわゆる変数とは一線を画しますね。僕には使い所が想像出来ません。

リスト型

リスト型はC言語などでいう配列型で、要素として真理値型〜文字列型を指定出来ます。

>>> list=['リンゴ','バナナ','キウイ']
>>> list
['リンゴ', 'バナナ', 'キウイ']
>>> list[0]
'リンゴ'

リスト型の初期化と要素の表示例です。

辞書(ディクショナリ)型

リスト型に似ていますが、これは先に例を見た方が分かりやすいでしょう。

>>> dic={'リンゴ':100,'バナナ':200,'キウイ':300}
>>> dic
{'リンゴ': 100, 'キウイ': 300, 'バナナ': 200}
>>> dic['キウイ']
300

辞書型という名前の通り要素をキーで指定するのがリスト型と異なるところです。

辞書型の初期化は中括弧を使うところもリスト型との違いです。

中括弧はiPhoneだと入力に困りますが、Pythonistaが追加表示してくれる括弧の長押しで表れます。

Pythonista 3

Pythonista 3

  • omz:software
  • 仕事効率化
  • ¥1,220


僕はあまり使いませんが、データベースなどを扱うには辞書型は便利でしょうね。

コメントアウト

apple = 100  #リンゴの価格

#の後ろがコメントになります。

Cでの//と同じですね。コメントアウト出来るのは一行だけです。


Python公式のコメントアウト方法はこれだけですが、テクニックとして

'''(シングルクオーテーション3つ)と'''の間、又は、"""(ダブルクオーテーション)と"""の間の複数行をコメントアウト出来るようです。

但し、'''と'''、'''"と"""のインデントが合っていないとエラーとなります。


今日はここまで(^-^)

文法の勉強は早くも飽きてきたのですが、最後に次回、オブジェクト思考型言語として重要な、オブジェクトやクラスについて書いて終わろうと思います。

マクセル(maxell)のEMSトレーニングギア「もてケア4極タイプ」でトレーニング開始!

こんにちは、なりなりです(^ ^)

マクセル(maxell)のEMSトレーニングギア「もてケア4極タイプ」を購入しました! - なりなり日記

購入した、maxellのEMSギア「もてケア4極タイプ」が届きました(^-^)


パッケージ表面


こちら裏面

  • お腹まわり
  • 腰まわり
  • 太もも

に使えるようです。

太腿にも使ってみようかな。太腿の強化は、テニスは勿論、トレランにもサイクリングにも重要ですから。

太腿は、朝のパワーアンクルを着けての24F階段上りでも鍛えていますけど。


付属品は

  • 簡単な取説
  • 本体
  • 保管シート(厚紙の台紙)
  • ゲルパッド
  • USBマイクロケーブル
  • ACアダプタ

です。


本体裏面のアップ


ゲルパッドのブルーのシートを剥がします。これはスッと剥がれます。


4個貼ったら


反対面の透明シートを剥がしますが、ブルーと違って貼り付きが強いので、ゲルパッドが外れない様に慎重に剥がします。


保管シートに乗せたら、USBケーブルを挿してしばし充電。LEDが消えたら充電完了です。

充電には1時間ほどかかるそうですが、実際に空になってから充電したところ40分ほどでした。

それでも、日々の使い方で何日で充電が必要になるかを見定めて、切れる前に充電した方が良さそうです。

満充電時の動作回数は

  • レベル1 : 30回
  • レベル5 : 20回
  • レベル15 : 10回

本体上面には

  • 電源ボタン
  • 強弱ボタン
  • マイクロUSBコネクタ

が有るだけのシンプルな作りです。


こちら、トレーニング開始前の僕のお腹です。

元々痩せていますし、歳の割にはお腹ポッコリでもありませんが、薄っすら割れ程度の弱々しい腹筋ですね。


摘めるのはこの程度。

サイクリングやトレランをするには、特に腹筋不足とは感じませんが、テニスでスピンサーブを打つには貧弱に感じています。

因みに、僕の本日の体組計とメジャーでの測定結果(帰宅後夕飯前)は

  • 体重 58.6kg
  • 身長169cm
  • ウェスト 75.5cm
  • 体脂肪率 18.3%
  • 体幹皮下脂肪率 10.7%
  • 体幹骨格筋率 27%

でした。

体脂肪率が思いのほか多いんですよねぇ、ジジイの証か(⌒-⌒; )


トレーニングは簡単


  • 電源ボタンを押すとレベル1でスタート
  • +ボタンを押してレベル調整
  • 自動的に15ステップのトレーニングが20分行われて電源オフ

です。

TVでも見ながらぼやっとしているうちに終了です。


注意点は様々有りますが

  • 同じ部位での使用は1日2回まで
  • 20分以上の連続使用をしない
  • 週に2日は休む

などが、トレーニングでの注意事項になります。


僕 レベル7(8だと少し痛かった)
奥さん レベル4

でスタートしました。痛く無い範囲で始めた方が良いでしょうね。不快なほどの刺激は避けるようにと注意書きがあります。

設定するレベルは、トレーニング強度は勿論、お腹の脂肪の厚さにも大きく依存すると思います。

脂肪が厚いと電気が腹筋に伝わりにくいですから。

うちの奥さんはお腹出しNGということなので、腹筋が出来る回数で効果を確認していきます。

僕も合わせて記録していきます。

二人とも、もてケア以外での腹筋トレーニングはしません。腹筋トレーニングは嫌いなので(⌒-⌒; )

本日、無理の無い範囲で腹筋が出来た回数

僕 25回
奥さん 20回

意外と出来た奥さんに対して、大差の無い僕でした(⌒-⌒; )


さて、今後、どうなっていくでしょう!?

トレーニングの効果は1月程度では出ないので、報告は2〜3ヶ月毎になると思います。

ナイキ(NIKE)のメンズテニスパンツ コート フレックス エースを購入!

こんにちは、なりなりです(^ ^)

今週末のテニストーナメント予選に向けて、テニスパンツを購入しました。

今まで、アンダーアーマーの短パンを履いていたのですが、土曜日の予選初日(R1はシード、R2とR3が有り)に勝ち残ると日曜日も2試合(R4とR5)が有るため、2枚目を用意しておこうかと。

初戦敗退かもしれないので初日に履きますけど(⌒-⌒; )


左右のデザインです。


通気性向上のために小さな穴が開いています。


裏返してみると、ウェスト調整用のバンジーコードとポケットが見えます。普通の短パンの作りです。


因みに、先週のマスターズ1000の出場選手は、自分のモデルを持っているフェデラー、ナダル以外のナイキ契約選手は皆、こちら、ナイキコート フレックスを着用していました。


写真からするとポケットがパンツの外側に縫い付けてあるようです。デザインが好みじゃありませんでしたが、実はボールが取り出しやすいのかも。

普通のポケットだと、セカンドサーブの時にボールを取りすと、ポケットがでろーんと外に出てしまいやすいですから。

UNIQLOのパンツは特に酷くて使いにくいです。


購入したのはJPのSサイズで、タグを見ると、ウェスト75cm、身長160-170cmとなっています。

NIKE.comのサイズチャートでは、ウェスト74.5~79.5cm、ヒップ88.5~93.5cmとなっています。

僕の場合、ウェスト76cmなのでピッタリ(^-^)


アンダーアーマーのS/Mサイズの短パンとの比較がこちら。

ナイキコートの方が短く細い。


最新のUNIQLOのドライパンツ Mサイズと比べると太くて短い。

因みに、UNIQLOのパンツは僕には緩くて、ドローコードをかなり締め上げる必要ありです。