2021/05/04(火) [n年前の日記]
#1 [wxpython] wxPython 4.1.1 を少し触ってる
昔、Python 2.7 を使っていた頃に書いていた、wxPython を利用するスクリプトを、Python 3.8.7 + wxPython 4.1.1 で動かそうとしたらエラーが出たり、非推奨の警告が出てしまった。
wxPython 4.x.x は、3.x.x と比べて、あちこちの仕様が変わっているようだなと。とりあえず一応は動作するように、ちょこちょこ修正してた。環境は Windows10 x64 20H2。
今回は、一つのスクリプトでも、wxPython 3.x.x と 4.x.x の両方で動くように、以下のような記述をしてみたり。
wx.version() で、wxPython のバージョンが得られるので、先頭の一文字を見て処理を分ける。みたいな。
ただ、こういう書き方は、あまり良くない気がする。例えば、将来的に、メジャーバージョン番号が2桁になった時は、確実に動作がおかしくなるわけで…。
Python自体のバージョンなら、メジャーバージョン値を取り出せるので、こういうのも少しはマシに書けそうだけど。
さておき。wxPython 3.x.x と 4.x.x で違っていると分かった点は以下。
wx.EVT_PAINT() や wx.EVT_SIZE() は非推奨になったらしい。self.Bind() で割り当てる模様。
wx.EmptyBitmap() は無くなった。wx.Bitmap() のコンストラクタが空のビットマップを返してくれる模様。
wx.Menu.Append() 内で、text= の指定は受け付けなくなった。
wx.Window.GetClientSizeTuple() は無くなった。おそらく wx.Window.GetClientSize() で代替できるのかな…。ただ、ウインドウが生成されてない時は (0, 0) が返ってきて、その後の処理で問題が発生するので、もし 0 が返ってきたら、仮で 1 を返すようにしておいたほうが良さそう。
wx.MemoryDC は、BeginDrawing()、EndDrawing() を呼べなくなった。とりあえず、単に省いてみたけど、一応動いているようには見える。ただ、これで正しいかどうかは分からない。
これは wxPython ではなくて、Python 2.7 と 3.x の違いだろうけど。random.randint(a, b) に渡す引数は int (整数) じゃないとダメなことになったらしい。とりあえず、random.randint(int(a), int(b)) として誤魔化した。
まだまだ他にも変更された仕様があるはず。どこかに一覧は無いのかな。
wxPython 4.x.x は、3.x.x と比べて、あちこちの仕様が変わっているようだなと。とりあえず一応は動作するように、ちょこちょこ修正してた。環境は Windows10 x64 20H2。
今回は、一つのスクリプトでも、wxPython 3.x.x と 4.x.x の両方で動くように、以下のような記述をしてみたり。
if int(wx.version()[0]) <= 3: # wxPython 3.x.x wx.EVT_PAINT(self, self.OnPaint) wx.EVT_SIZE(self, self.OnSize) else: # wxPython 4.x.x self.Bind(wx.EVT_PAINT, self.OnPaint) self.Bind(wx.EVT_SIZE, self.OnSize)
wx.version() で、wxPython のバージョンが得られるので、先頭の一文字を見て処理を分ける。みたいな。
Python 2.7.18 (v2.7.18:8d21aa21f2, Apr 20 2020, 13:19:08) [MSC v.1500 32 bit (Intel)] on win32 ... >>> import wx >>> wx.version() '3.0.2.0 msw (classic)'
Python 3.8.7 (tags/v3.8.7:6503f05, Dec 21 2020, 17:59:51) [MSC v.1928 64 bit (AMD64)] on win32 >>> import wx >>> wx.version() '4.1.1 msw (phoenix) wxWidgets 3.1.5'
ただ、こういう書き方は、あまり良くない気がする。例えば、将来的に、メジャーバージョン番号が2桁になった時は、確実に動作がおかしくなるわけで…。
Python自体のバージョンなら、メジャーバージョン値を取り出せるので、こういうのも少しはマシに書けそうだけど。
Python 3.8.7 (tags/v3.8.7:6503f05, Dec 21 2020, 17:59:51) [MSC v.1928 64 bit (AMD64)] on win32 >>> import sys >>> sys.version_info sys.version_info(major=3, minor=8, micro=7, releaselevel='final', serial=0) >>> sys.version_info.major 3追加モジュールに対してそういうことはできないのだろうか?
さておき。wxPython 3.x.x と 4.x.x で違っていると分かった点は以下。
wx.EVT_PAINT() や wx.EVT_SIZE() は非推奨になったらしい。self.Bind() で割り当てる模様。
if int(wx.version()[0]) <= 3: # wxPython 3.x.x wx.EVT_PAINT(self, self.OnPaint) wx.EVT_SIZE(self, self.OnSize) else: # wxPython 4.x.x self.Bind(wx.EVT_PAINT, self.OnPaint) self.Bind(wx.EVT_SIZE, self.OnSize)
wx.EmptyBitmap() は無くなった。wx.Bitmap() のコンストラクタが空のビットマップを返してくれる模様。
if int(wx.version()[0]) <= 3: # wxPython 3.x.x self._Buffer = wx.EmptyBitmap(*Size) else: # wxPython 4.x.x self._Buffer = wx.Bitmap(*Size)
if int(wx.version()[0]) <= 3: # wxPython 3.x.x self.buffer = wx.EmptyBitmap(width, height) self.backbuffer = wx.EmptyBitmap(width, height) else: # wxPython 4.x.x self.buffer = wx.Bitmap(width, height) self.backbuffer = wx.Bitmap(width, height)
wx.Menu.Append() 内で、text= の指定は受け付けなくなった。
file_menu = wx.Menu() # item = file_menu.Append(wx.ID_ANY, text="&Open Image\tCtrl-O") item = file_menu.Append(wx.ID_ANY, "&Open Image\tCtrl-O") self.Bind(wx.EVT_MENU, self.LoadImage, item)
wx.Window.GetClientSizeTuple() は無くなった。おそらく wx.Window.GetClientSize() で代替できるのかな…。ただ、ウインドウが生成されてない時は (0, 0) が返ってきて、その後の処理で問題が発生するので、もし 0 が返ってきたら、仮で 1 を返すようにしておいたほうが良さそう。
# MaxX, MaxY = self.Window.GetClientSizeTuple() MaxX, MaxY = self.Window.GetClientSize() if MaxX == 0: MaxX = 1 if MaxY == 0: MaxY = 1
wx.MemoryDC は、BeginDrawing()、EndDrawing() を呼べなくなった。とりあえず、単に省いてみたけど、一応動いているようには見える。ただ、これで正しいかどうかは分からない。
dc = wx.MemoryDC() dc.SelectObject(self.backbuffer) if int(wx.version()[0]) <= 3: # wxPython 3.x.x dc.BeginDrawing() self.draw(dc) dc.EndDrawing() self.flip() else: # wxPython 4.x.x self.draw(dc) self.flip()
これは wxPython ではなくて、Python 2.7 と 3.x の違いだろうけど。random.randint(a, b) に渡す引数は int (整数) じゃないとダメなことになったらしい。とりあえず、random.randint(int(a), int(b)) として誤魔化した。
まだまだ他にも変更された仕様があるはず。どこかに一覧は無いのかな。
[ ツッコむ ]
#2 [zatta] ハコスコを使ってみたけど悲しい結果に
100円ショップ Seria に寄ったら、ハコスコなるものが目に入った。スマホを利用する、ダンボール製のVRゴーグル、みたいなものらしい。妹から古いスマホを貰って持ち歩いてることだし、これはちょっと試してみたいなと。100円だし。
てなわけで購入して、帰宅後組み立てて試用してみたのだけど。どうも様子がおかしい。向きを変えても映像が全然追従してこない。むにょーん、うにょーん、という感じでゆっくりのんびり反応する感じで。
調べてみたら、今回使った Android スマホ、HUAWEI P9 lite には、ジャイロセンサー(ジャイロスコープ)がついてなかったようで…。「内蔵センサー」という名前のアプリをインストールして確認してみたら、「ジャイロスコープ : 無し」と…。 *1 おそらく、加速度センサを利用した疑似ジャイロ・仮想ジャイロ、みたいなソレで動いてたんじゃないかな…。こういうところでコストダウンしてるのね…。
ということで、VR体験はできなかった。残念。
余談。最初、眼鏡を外して覗いてみたら、画面がボケボケで。もしや、と思って眼鏡をつけたまま覗いてみたら、そこそこクッキリした状態で見えるようになった。こういうのって、眼鏡をつけたまま利用するものだったのか…。知らなかった…。光学的にはどうなってるんだろう…。
てなわけで購入して、帰宅後組み立てて試用してみたのだけど。どうも様子がおかしい。向きを変えても映像が全然追従してこない。むにょーん、うにょーん、という感じでゆっくりのんびり反応する感じで。
調べてみたら、今回使った Android スマホ、HUAWEI P9 lite には、ジャイロセンサー(ジャイロスコープ)がついてなかったようで…。「内蔵センサー」という名前のアプリをインストールして確認してみたら、「ジャイロスコープ : 無し」と…。 *1 おそらく、加速度センサを利用した疑似ジャイロ・仮想ジャイロ、みたいなソレで動いてたんじゃないかな…。こういうところでコストダウンしてるのね…。
ということで、VR体験はできなかった。残念。
余談。最初、眼鏡を外して覗いてみたら、画面がボケボケで。もしや、と思って眼鏡をつけたまま覗いてみたら、そこそこクッキリした状態で見えるようになった。こういうのって、眼鏡をつけたまま利用するものだったのか…。知らなかった…。光学的にはどうなってるんだろう…。
*1: 加えて、歩行検出センサが無いことも分かった。
[ ツッコむ ]
#3 [tv][pc] 「神田伯山のこれがわが社の黒歴史」ピピンアットマークの回を視聴
NHK総合で、「神田伯山のこれがわが社の黒歴史」が放送されていたので録画して視聴。あの伝説のゲーム機(?)、ピピンアットマークを扱った回。元々はBSで放送されてたのだったかな…。
_神田伯山のこれがわが社の黒歴史
講談師の語り+ガンプラのコマ撮りアニメで、件の商品の顛末を伝えていくスタイル。こういう見せ方で伝えていくのは面白いなと感心。このフォーマットはアリなんじゃないかな…。
他のネタも見てみたいけど、各企業が企画にOKを出す・出さないが、一番のハードルになりそうでもあり…。
さておき。ピピンアットマークについては、以下の記事も参考になりそうな。
_「ピピン」とは何だったのか バンダイとAppleの黒歴史として失笑するだけでいいのか?(1/4 ページ) - ITmedia NEWS
_世界で最も売れなかったゲーム機「ピピンアットマーク」はどうして失敗してしまったのか? - GIGAZINE
当時、「きっとこんな未来が来るだろう」と予測できていた人達はそこそこ居て、 *1 故にこういった商品もチラホラ出て、しかし早過ぎてアレなことになっていったわけだけど。さて、今現在、「きっとこんな未来が」と予測していて、しかもそこに向けた商品を企画できている人はどの程度居るのだろうと…。しっかり予測できていたけどタイミングが合わなかった人達を、今、予測すらできていない人達が笑ってしまってもいいものだろうか…。てなことを思ってしまったりもして。
_神田伯山のこれがわが社の黒歴史
講談師の語り+ガンプラのコマ撮りアニメで、件の商品の顛末を伝えていくスタイル。こういう見せ方で伝えていくのは面白いなと感心。このフォーマットはアリなんじゃないかな…。
他のネタも見てみたいけど、各企業が企画にOKを出す・出さないが、一番のハードルになりそうでもあり…。
さておき。ピピンアットマークについては、以下の記事も参考になりそうな。
_「ピピン」とは何だったのか バンダイとAppleの黒歴史として失笑するだけでいいのか?(1/4 ページ) - ITmedia NEWS
_世界で最も売れなかったゲーム機「ピピンアットマーク」はどうして失敗してしまったのか? - GIGAZINE
当時、「きっとこんな未来が来るだろう」と予測できていた人達はそこそこ居て、 *1 故にこういった商品もチラホラ出て、しかし早過ぎてアレなことになっていったわけだけど。さて、今現在、「きっとこんな未来が」と予測していて、しかもそこに向けた商品を企画できている人はどの程度居るのだろうと…。しっかり予測できていたけどタイミングが合わなかった人達を、今、予測すらできていない人達が笑ってしまってもいいものだろうか…。てなことを思ってしまったりもして。
[ ツッコむ ]
以上、1 日分です。