LoginSignup
3
3

More than 5 years have passed since last update.

wxPythonでテキスト入力を取得するGUIを作る

Last updated at Posted at 2018-12-26

目的

wxPythonモジュールを用いてテキスト入力を受け付けるウィンドウを作る。

作者はwxPython歴1時間強なので最適な手法であることは保証しない

真の目的()

  • Python3ではinput()を用いればコマンドラインからユーザのテキスト入力を受けられる。
  • ところがPython2ではこれはinput_raw()という関数でなくてはいけない。

Python2系でもPython3系でも使えるGUIのテキスト取得手法がほしいなぁという背景があったりした。

ソースコード

TextCtrlというWidgetがあるらしいが,公式のWiki?に使い方の説明がなかったのでノリで書いた。

Referenceはある。あるがこれだと経験1時間の初心者では組み方のイメージがわかない。

なんやかんやあってClass実装だがこんな感じにできた。
以下の記事さんのおかげで大変助かりました。ありがとうございました。
https://nippori30.hatenablog.com/entry/2017/09/24/220000

import wx


class GUIinput:
    def __init__(self):
        self.frame = wx.Frame(None, -1, "textbox")
        self.frame.SetTitle('Write Text Here')
        panel_ui = wx.Panel(self.frame, -1, pos=(50, 50), size=(100, 50)) 

        # message
        self.frame.label = wx.StaticText(panel_ui, -1, 'Write some message here', pos=(10, 10))
        # text box
        self.frame.box = wx.TextCtrl(panel_ui, -1, pos=(10, 30),style=wx.TE_PROCESS_ENTER)
        self.frame.box.Bind(wx.EVT_TEXT_ENTER, self.Clicked) #text enter

        # button        
        btn = wx.Button(panel_ui, -1, 'OK', pos=(10, 60))
        btn.Bind(wx.EVT_BUTTON, self.Clicked)

        self.frame.Show(True)

    def Clicked(self,event):
        self.text = self.frame.box.GetValue()
        self.frame.Close(True)


app = wx.App()
frame = GUIinput()
app.SetTopWindow(frame.frame)
app.MainLoop()

print(frame.text)

見た目

なんかサイズ指定とか位置指定がガバイ。

Objectの高さの間隔は大体20~30pixでやればいいと思う。

image.png

疑問

  • クラス実装じゃなきゃダメなのか
  • もっと簡単にできないのか
  • GUI手動で配置できないのか…
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3