【PythonでGUI】PyQt5 -ウィジェットⅡ-

[前回](http://qiita.com/Algebra_nobu/items/6248c509401b0e666a55)の続き

[widgets Ⅱ](http://zetcode.com/gui/pyqt5/widgets2/)
こちらのサイトを日本語でざっくりとまとめていきます。

#【画像表示の最適化】
```py3:QPixmap.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-


import sys
from PyQt5.QtWidgets import (QWidget, QHBoxLayout, 
    QLabel, QApplication)
from PyQt5.QtGui import QPixmap


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):      

        hbox = QHBoxLayout(self)
        # QPixmapオブジェクト作成
        pixmap = QPixmap("imoyokan.jpg")

        # ラベルを作ってその中に画像を置く
        lbl = QLabel(self)
        lbl.setPixmap(pixmap)

        hbox.addWidget(lbl)
        self.setLayout(hbox)
        
        self.move(300, 200)
        self.setWindowTitle('Imoyokan')
        self.show()        
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
```
<img width="166" alt="pixmap.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/31bcb2ca-12ab-1ade-9eaf-fc03a3bae431.png">

#【入力したテキストをラベルに表示】
```py3:QLineEdit.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-


import sys
from PyQt5.QtWidgets import (QWidget, QLabel, 
    QLineEdit, QApplication)


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):      

        # ラベルオブジェクト作成
        self.lbl = QLabel(self)
        # QLineEditオブジェクト作成
        qle = QLineEdit(self)
        
        qle.move(60, 100)
        self.lbl.move(60, 40)

        # qleに文字が入力されたら、onChanged関数の呼び出し
        qle.textChanged[str].connect(self.onChanged)
        
        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('QLineEdit')
        self.show()
        
        
    def onChanged(self, text):
        
        # ラベルに入力されたテキストを挿入
        self.lbl.setText(text)
        # 入力されたテキストによって、ラベルの長さを調整
        self.lbl.adjustSize()        
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
```
<img width="151" alt="lineedit.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/5f43858f-a9a1-3030-a74c-a83582784345.png">

#【ウィジェットサイズをドラッグで変更】
```py3:QSplitter
#!/usr/bin/python3
# -*- coding: utf-8 -*-


import sys
from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QFrame, 
    QSplitter, QStyleFactory, QApplication)
from PyQt5.QtCore import Qt


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):      

        hbox = QHBoxLayout(self)

        # フレームオブジェクトの作成
        topleft = QFrame(self)
        # フレームの形状設定
        topleft.setFrameShape(QFrame.StyledPanel)
 
        topright = QFrame(self)
        topright.setFrameShape(QFrame.StyledPanel)

        bottom = QFrame(self)
        bottom.setFrameShape(QFrame.StyledPanel)

        # 水平方向のQSplitterオブジェクトを作成して、フレームを追加
        splitter1 = QSplitter(Qt.Horizontal)
        splitter1.addWidget(topleft)
        splitter1.addWidget(topright)

        # # 垂直方向のQSplitterオブジェクトを作成して、フレームを追加
        splitter2 = QSplitter(Qt.Vertical)
        splitter2.addWidget(splitter1)
        splitter2.addWidget(bottom)

        hbox.addWidget(splitter2)
        self.setLayout(hbox)
        
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QSplitter')
        self.show()
        
        
    def onChanged(self, text):
        
        self.lbl.setText(text)
        self.lbl.adjustSize()        
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
```
<img width="208" alt="aplitter.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/ca9f8e75-0b5a-8fa1-9775-1d2a56e21593.png">

#【コンボボックス】
```py3:QComboBox.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-


import sys
from PyQt5.QtWidgets import (QWidget, QLabel, 
    QComboBox, QApplication)


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):      

        # ラベル作成、初期の名前をUbuntuにする
        self.lbl = QLabel("Ubuntu", self)

        # QComboBoxオブジェクトの作成
        combo = QComboBox(self)
        # アイテムの名前設定
        combo.addItem("Ubuntu")
        combo.addItem("Mandriva")
        combo.addItem("Fedora")
        combo.addItem("Arch")
        combo.addItem("Gentoo")

        combo.move(50, 50)
        self.lbl.move(50, 150)

        # アイテムが選択されたらonActivated関数の呼び出し
        combo.activated[str].connect(self.onActivated)        
         
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QComboBox')
        self.show()
        
        
    def onActivated(self, text):
        
        # ラベルに選択されたアイテムの名前を設定
        self.lbl.setText(text)
        # ラベルの長さを調整
        self.lbl.adjustSize()  
        
                
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
```
<img width="161" alt="combobox.png" src="https://qiita-image-store.s3.amazonaws.com/0/121997/8e184a5c-484d-7e77-5b4b-4c1d2d155d4f.png">

[次回](http://qiita.com/Algebra_nobu/items/803b5595938b17d90a21)は[Drag & drop](http://zetcode.com/gui/pyqt5/dragdrop/)をざっくり試していきます。