[PyQtチュートリアル[BeYourself]
13179 ワード
この文章はPyQtシリーズの開発者Martin FitzpatrickのPyQtチュートリアルを参考に書いたものです.
0. Key Concepts
信号は、Widgetが何かあったときに発する信号である.多くの信号は、クリック、カーソル移動など、ユーザーの動作に関係していますが、これはルールではありません. Slotとは、信号を受信するためのSlotを意味し、Python内部の任意の機能または方法は、信号をslotに接続することができる.
では、信号とSlotの簡単な例として、
まずは、「Clicked!メッセージを出力する関数を作成し、ボタンを押した信号に関連付けます.
次に、ボタンの状態を<押されたか押されていないか>の2つに設定し、ブールデータを送信してみます.
アプリケーションでタイマーを作成するときに非常に役立つ機能であることに注意してください.整理します.
多くの場合、現在のステータスを保存するのに役立ちます.
Qtアプリケーションにおけるユーザとのすべてのインタラクションはイベントである.Qtは多くのタイプでイベントを定義し,各イベントは異なる形式のインタラクションを表す.
Qtは,イベントオブジェクトを用いて何が起こったかに関する情報をパッケージ化し,それを部品内のイベントHandlerに渡して処理する.
0. Key Concepts
PyQtはQApplication
クラスを中心に動作する.
Qapplicationクラスはパラメータとして実行され、Qtイベントループを起動する役割を果たします.
Event Loopは、何が起こるかまでアプリケーションで動作し続けます.アプリケーション内のすべてのアクティビティ(カーソルを移動またはクリック)は、イベントHandler内部のイベントキューに記録されるイベントをトリガーします.
イベントハンドラは、イベントに関連する一連のプロセスを制御します.
各アプリケーションにはイベントループが1つしかありません.
1. Creating an Application
1.1 QApplication()
では、実際のコードでQLPplicationを介してイベントループを返しましょう.
# 애플리케이션당 QApplication instance는 단 하나만 존재한다.
# Command Line Argument를 사용하지 않을 것이라 판단되면, 빈 리스트를 파라미터로 집어넣어도 된다.
app = QApplication(sys.argv)
# 애플리케이션의 윈도우로 이용될 Qt Widget을 만든다.
# QWidget의 default는 hidden임이므로, 꼭 두 번째 줄을 추가해야 한다.
window = QWidget()
window.show()
# Event Loop을 시작한다.
app.exec()
# 애플리케이션은 Event Loop가 끝날 때까지 이 지점에 오지 못한다!
コードの作成に成功すると、次のウィンドウが表示されます.このウィンドウは、アプリケーションのスケルトンになるウィンドウです.
Qtでは、すべてのトップレベルのWidgetがwindowです.つまり、すべてのウィンドウに依存するWidgetはありません.したがって、任意のWidgetを使用してWindowを作成できます.
1.2 QMainWindow()
Qtでは、任意のwidgetがWindowであってもよい.したがって、前のコードを以下のように変更しても、正常に動作します.
import sys
from PyQt5.QtWidgets import QApplication, QPushButton
app = QApplication(sys.argv)
window = QPushButton("Push Me") # QWidget 대신에
window.show()
app.exec()
この論理によれば、PyQtは、Widget上にWidgetを積層し、1つの空のWindowから複数の機能を有する複雑なUIを構築することができる.
しかしながら、PyQtは、複数の標準構成要素を含むQMainWindow
というソフトウェアパッケージを提供する.
現在、アプリケーションに特別な機能を追加するつもりはありませんので、このパッケージを直接使用することにしました.
実行後、先ほどと同じ外観のウィンドウが作成されました.
アプリケーションの実装にはより多くの機能が必要であり、ほとんどのQt WidgetはQtPy5.QtWidgets
からインポートできます.
2.Signals, Slots & Events
1.1 QApplication()
では、実際のコードでQLPplicationを介してイベントループを返しましょう.
# 애플리케이션당 QApplication instance는 단 하나만 존재한다.
# Command Line Argument를 사용하지 않을 것이라 판단되면, 빈 리스트를 파라미터로 집어넣어도 된다.
app = QApplication(sys.argv)
# 애플리케이션의 윈도우로 이용될 Qt Widget을 만든다.
# QWidget의 default는 hidden임이므로, 꼭 두 번째 줄을 추가해야 한다.
window = QWidget()
window.show()
# Event Loop을 시작한다.
app.exec()
# 애플리케이션은 Event Loop가 끝날 때까지 이 지점에 오지 못한다!
コードの作成に成功すると、次のウィンドウが表示されます.このウィンドウは、アプリケーションのスケルトンになるウィンドウです.Qtでは、すべてのトップレベルのWidgetがwindowです.つまり、すべてのウィンドウに依存するWidgetはありません.したがって、任意のWidgetを使用してWindowを作成できます.
1.2 QMainWindow()
Qtでは、任意のwidgetがWindowであってもよい.したがって、前のコードを以下のように変更しても、正常に動作します.
import sys
from PyQt5.QtWidgets import QApplication, QPushButton
app = QApplication(sys.argv)
window = QPushButton("Push Me") # QWidget 대신에
window.show()
app.exec()
この論理によれば、PyQtは、Widget上にWidgetを積層し、1つの空のWindowから複数の機能を有する複雑なUIを構築することができる.しかしながら、PyQtは、複数の標準構成要素を含む
QMainWindow
というソフトウェアパッケージを提供する.現在、アプリケーションに特別な機能を追加するつもりはありませんので、このパッケージを直接使用することにしました.
実行後、先ほどと同じ外観のウィンドウが作成されました.
アプリケーションの実装にはより多くの機能が必要であり、ほとんどのQt Widgetは
QtPy5.QtWidgets
からインポートできます.2.Signals, Slots & Events
2.1 Connecting Widgets with Python Method
では、信号とSlotの簡単な例として、
QpushButton
機能によりボタンを押して信号を送信するプログラムを実施する.まずは、「Clicked!メッセージを出力する関数を作成し、ボタンを押した信号に関連付けます.
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
button = QPushButton("Press Me!")
button.setCheckable(True)
button.clicked.connect(self.the_button_was_clicked)
# Set the central widget of the Window.
self.setCentralWidget(button)
def the_button_was_clicked(self):
print("Clicked!")
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec()
Recieving Data
次に、ボタンの状態を<押されたか押されていないか>の2つに設定し、ブールデータを送信してみます.
アプリケーションでタイマーを作成するときに非常に役立つ機能であることに注意してください.整理します.
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My App")
button = QPushButton("Press Me!")
button.setCheckable(True)
button.clicked.connect(self.the_button_was_clicked)
button.clicked.connect(self.the_button_was_toggled)
self.setCentralWidget(button)
def the_button_was_clicked(self):
print("Clicked!")
def the_button_was_toggled(self, checked):
print("Checked?", checked)
Storing Data
多くの場合、現在のステータスを保存するのに役立ちます.
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.button_is_checked = True
self.setWindowTitle("My App")
button = QPushButton("Press Me!")
button.setCheckable(True)
button.clicked.connect(self.the_button_was_toggled)
button.setChecked(self.button_is_checked)
self.setCentralWidget(button)
def the_button_was_toggled(self, checked):
self.button_is_checked = checked
print(self.button_is_checked)
2.2 Connecting Widgets together Directly
2.3 Events
Qtアプリケーションにおけるユーザとのすべてのインタラクションはイベントである.Qtは多くのタイプでイベントを定義し,各イベントは異なる形式のインタラクションを表す.
Qtは,イベントオブジェクトを用いて何が起こったかに関する情報をパッケージ化し,それを部品内のイベントHandlerに渡して処理する.
Reference
この問題について([PyQtチュートリアル[BeYourself]), 我々は、より多くの情報をここで見つけました https://velog.io/@toezilla/BeYourself-PyQt-튜토리얼テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol