Skip to content

基本 Widget を使ってみる(1):LineEdit

widget を説明したところで、PySide でよく使う Widget の参考を色々書きながら
頻出な関数などを紹介していこうと思います。

まずは LineEdit。

いわゆる 1 行の入力欄になります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!python3
# -*- coding: utf-8 -*-
import sys
import os.path
from PySide2 import QtCore, QtGui, QtWidgets

class UISample(QtWidgets.QDialog):

    def __init__(self, parent=None):
        super(UISample, self).__init__(parent)
        # カスタムUIを作成
        layout = QtWidgets.QVBoxLayout()
        self.setLayout(layout)
        self.lineEdit = QtWidgets.QLineEdit()
        self.btn = QtWidgets.QPushButton("Push")
        layout.addWidget(self.lineEdit)
        layout.addWidget(self.btn)

        self.btn.clicked.connect(self.pushBtn)

    def pushBtn(self):
        """
        LineEditに書かれた内容を取得する
        """
        print(self.lineEdit.text())


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    a = UISample()
    a.show()
    sys.exit(app.exec_())

このコマンドを実行すると、LineEdit に入力されている文字列をプリントすることができます。

Widget の機能を使う方法

取得・セット

「値を取得する」だったり「セットする」だったり
追加した Widget に対して何かしたい場合は、その Widget のオブジェクト(インスタンス?)
にアクセスすれば OK です。

1
self.lineEdit.text()

上のサンプルの場合、この部分です。
使いたい Widget を知りたければ、とりあえず公式 Help を開きます。
https://doc.qt.io/qtforpython/PySide2/QtWidgets/QLineEdit.html
LineEdit のヘルプはこちら。
クラスの構造的には QWidet を継承しているだけなので、比較的シンプルな構造です。
現在入力されているものを取得 したい場合は text() を使用すれば OK なのが Help を見れば分かります。

次に、デフォルトですでに文字が入っているようにしたい場合はどうすればいいか。

1
self.lineEdit.setText("Hello World")

その場合は、setText を使用します。

実行すると、こんな感じでデフォルトで文字が入った状態になります。

Enter 押したらなにかする

LineEdit の場合は、Enter を押したらなにかを実行したいケースがでてきます。
その場合は

1
2
3
4
5
        # __init__内に↓を記述
        self.lineEdit.returnPressed.connect(self.pressReturn)

    def pressReturn(self):
        print(self.lineEdit.text())

returnPressed のシグナルを追加します。
シグナルについては Signal-Slot についてを参照。
これ以外に LineEdit では textChanged 等を良く使います。

Widget の Slot を使う

ボタンを押したらなにかをする のように Widget 側をトリガーにする他に
Widget 側の Slot を使用することができます

1
self.btn.clicked.connect(self.lineEdit.selectAll)

LineEdit の場合は、 setText や cut copy paste selectAll 等が Slot として用意されています。
ので、ボタンの connect 先に LineEdit の Slot を指定すれば
ボタンを押せば~~~する のような事を行うことが出来ます。

何かをセットする

widget に対してなにかをセットする場合は、 set####という名前になっている
関数を使用します。

1
self.lineEdit.setMaxLength(10)

例としてこんな感じ。

QtDesigner のプロパティエディタにある Widget の設定項目を、Python 側で編集したい場合は
この set ~~~~でほぼ設定することができます。

設定する値は、Help に書いてある所の arg__1 が引数の数で
Parameters が その引数をどの型で指定するか...という意味になります。
この場合、int なので、LineEdit の行数は 10 とか 20 のような int 型で指定
すれば OK という意味になります。

次はたぶん RadioButton/CheckBox あたり。