1. donkonishi

    No comment

    donkonishi
Changes in body
Source | HTML | Preview
@@ -1,215 +1,220 @@
## Qtとは?
> Qt(キュート)はC++言語で書かれたアプリケーション・ユーザインタフェース (UI) フレームワークである。
> GUIツールキットとして広く知られているQtであるが、コンソールツールやサーバのような非GUIプログラムでも広く使用されている。
[Wikipediaより](https://ja.wikipedia.org/wiki/Qt)
GUIアプリケーションを簡単に作ることができるフレームワーク。クロスプラットフォーム開発にも対応してるそう。
## PyQtとは?
> PyQtは、クロスプラットフォームなGUIツールキットであるQtのPythonバインディングにして、PythonでGUIプログラミングをするときの選択肢の一つである。
[Wikipediaより](https://ja.wikipedia.org/wiki/PyQt)
Python用にセッティングされたQt、GUIアプリケーションを簡単に作ることができる。
## PyQtの利点
* 機能が豊富で、感覚的にGUIのアプリケーションを作ることができる。
* QtがPythonだけでなく、いろんな言語に対応してる、そのため他言語への移植が容易
## PyQtの問題点
* よくわからないけど、商用利用する場合にはライセンスが必要(とても高い)
* リファレンスが読みにくい(おそらく、いや間違いなく僕の読解力不足、英語力不足)
## 先ずはPyQt5を使える環境を整える
### 手順
1. Pythonをインストール
2. Qtのインストール(かなり時間かかるかも)
3. PyQtのインストール
環境設定についてはここでは解説しないので、ggrks
## 実際にコードを書いてみよう
### 先ずはWindowを出してみる
```python:window.py
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import *
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
```
実行すると何もないウィンドウが出る
### ボタンとタイトルをつけてみよう
```python:button.py
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import *
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
button = QPushButton('button')
layout = QGridLayout()
layout.addWidget(button)
self.setLayout(layout)
self.setWindowTitle("Button")
if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
```
ボタンとタイトルが付いた
### テキストフィールドの値を読み込んで表示してみよう
```python:input-output.py
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import *
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.button = QPushButton('読み込み・表示')
self.button.clicked.connect(self.output)
self.inputText = QLineEdit()
self.inputText.setText("")
self.outputText = QLineEdit()
self.outputText.setText("")
self.outputText.setReadOnly(True)
textLayout = QHBoxLayout()
textLayout.addWidget(self.inputText)
textLayout.addWidget(self.outputText)
layout = QVBoxLayout()
layout.addLayout(textLayout)
layout.addWidget(self.button)
self.setLayout(layout)
self.setWindowTitle("Button")
def output(self):
self.outputText.setText(self.inputText.text())
if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
```
テキストを入力してボタンを押すと、テキストが出力される
### QGraphicsViewで入力された文字列を表示
```python:string-graphic.py
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class ShowString(QGraphicsItem):
def __init__(self, width=200, height=10, text=""):
super(ShowString, self).__init__()
self.width = width
self.height = height
self.text = text
def paint(self, painter, option, widget):
painter.setPen(Qt.black)
painter.drawText(0, 20, self.text)
def boundingRect(self):
return QRectF(0,0,400,100)
def setText(self, text):
self.text = text
self.update()
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.graphicView = QGraphicsView()
self.showString = ShowString()
scene = QGraphicsScene(self.graphicView)
scene.setSceneRect(0, 0, 400, 100)
self.graphicView.setScene(scene)
self.graphicView.resize(300,50)
scene.addItem(self.showString)
self.button = QPushButton('読み込み・表示')
self.button.clicked.connect(self.output)
self.inputText = QLineEdit()
self.inputText.setText("")
self.outputText = QLineEdit()
self.outputText.setText("")
self.outputText.setReadOnly(True)
textLayout = QHBoxLayout()
textLayout.addWidget(self.inputText)
textLayout.addWidget(self.outputText)
layout = QVBoxLayout()
layout.addWidget(self.graphicView)
layout.addLayout(textLayout)
layout.addWidget(self.button)
self.setLayout(layout)
self.setWindowTitle("Button")
def output(self):
self.outputText.setText(self.inputText.text())
self.showString.setText(self.inputText.text())
if __name__ == '__main__':
app = QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
```
一個前のプログラムに、QGraphicsViewでの文字列出力を追加した
### またサンプルプログラム追加するかも。。。
## 感想・考察
以上、PyQt5とPython3で遊んでみた、でした。
本当に感覚的にGUI設計ができるので、好き。
+### 参考
+以下、参考にさせてもらいました。ありがとうございました。
+http://d.hatena.ne.jp/mFumi/20141112/1415806010
+http://qiita.com/kenasman/items/55505654823e9d040e6e
+