Help us understand the problem. What is going on with this article?

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

目的

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手動で配置できないのか…
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away