「PyQtの基礎 - 画面」の版間の差分
(ページの作成:「== 概要 == <br><br> == 画面の表示 == まず、PyQtで基本となるものは、画面を表示することである。<br> 以下のサンプルコードでは…」) |
編集の要約なし |
||
5行目: | 5行目: | ||
== 画面の表示 == | == 画面の表示 == | ||
まず、PyQtで基本となるものは、画面を表示することである。<br> | まず、PyQtで基本となるものは、画面を表示することである。<br> | ||
以下のサンプルコードでは、<code>QWidget</code>クラスを使用して画面のみを表示している。<br> | |||
<source lang="python"> | <source lang="python"> | ||
# - * - coding: utf8 - * - | # - * - coding: utf8 - * - | ||
43行目: | 43行目: | ||
ステータスバーには、現在の画面内の情報等を表示することが可能である。<br> | ステータスバーには、現在の画面内の情報等を表示することが可能である。<br> | ||
<br> | <br> | ||
上記のセクションでは、<code>QWidget</code>クラスを継承したMyWindowクラスを作成して画面を表示しているが、<br> | |||
ステータスバーを表示するには、<code>QMainWindow</code>クラスを継承して画面を作成する必要がある。<br> | |||
<br> | <br> | ||
<code>QWidget</code>クラスや<code>QDialog</code>クラスを使用して画面を作成することもできるが、<br> | |||
メイン画面においては<code>QMainWindow</code>クラスを使用することを推奨する。<br> | |||
それは、<u><code>QMainWindow</code>クラスは、以下に示すメイン画面を作成するための機能を提供しているからである。</u><br> | |||
* メニューバー | * メニューバー | ||
* ツールバー | * ツールバー | ||
53行目: | 54行目: | ||
* 中央ウィジェット | * 中央ウィジェット | ||
* ステータスバー | * ステータスバー | ||
<br> | |||
以下のサンプルコードでは、ステータスバーを表示している。<br> | 以下のサンプルコードでは、ステータスバーを表示している。<br> | ||
<source lang="python"> | <source lang="python"> | ||
62行目: | 63行目: | ||
from PyQt5.QtWidgets import * | from PyQt5.QtWidgets import * | ||
# | # QMainWindowクラスの使用 | ||
class MyWindow( | class MyWindow(QMainWindow): | ||
def __init__(self, parent=None): | def __init__(self, parent=None): | ||
97行目: | 98行目: | ||
from PyQt5.QtWidgets import * | from PyQt5.QtWidgets import * | ||
# | # QMainWindowクラスの使用 | ||
class MyWindow( | class MyWindow(QMainWindow): | ||
def __init__(self, parent=None): | def __init__(self, parent=None): | ||
154行目: | 155行目: | ||
from PyQt5.QtWidgets import * | from PyQt5.QtWidgets import * | ||
# | # QMainWindowクラスの使用 | ||
class MyWindow( | class MyWindow(QMainWindow): | ||
def __init__(self, parent=None): | def __init__(self, parent=None): |
2020年9月29日 (火) 05:23時点における版
概要
画面の表示
まず、PyQtで基本となるものは、画面を表示することである。
以下のサンプルコードでは、QWidget
クラスを使用して画面のみを表示している。
# - * - coding: utf8 - * -
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
# QWidgetクラスの使用
class MyWindow(QWidget):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.title = "ウィンドウのタイトル"
self.width = 500
self.height = 400
self.setWindowTitle(self.title)
self.setGeometry(0, 0, self.width, self.height)
self.show()
def main():
App = QApplication(sys.argv)
Window = MyWindow()
sys.exit(App.exec_())
if __name__ == "__main__":
main()
ステータスバーの表示
ここでは、画面にステータスバーを表示する方法を記載する。
ステータスバーには、現在の画面内の情報等を表示することが可能である。
上記のセクションでは、QWidget
クラスを継承したMyWindowクラスを作成して画面を表示しているが、
ステータスバーを表示するには、QMainWindow
クラスを継承して画面を作成する必要がある。
QWidget
クラスやQDialog
クラスを使用して画面を作成することもできるが、
メイン画面においてはQMainWindow
クラスを使用することを推奨する。
それは、QMainWindow
クラスは、以下に示すメイン画面を作成するための機能を提供しているからである。
- メニューバー
- ツールバー
- ドックウィジェット
- 中央ウィジェット
- ステータスバー
以下のサンプルコードでは、ステータスバーを表示している。
# - * - coding: utf8 - * -
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
# QMainWindowクラスの使用
class MyWindow(QMainWindow):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.title = "ウィンドウのタイトル"
self.width = 500
self.height = 400
self.setWindowTitle(self.title)
self.setGeometry(0, 0, self.width, self.height)
self.statusBar().showMessage('ステータスバーの表示')
self.show()
def main():
App = QApplication(sys.argv)
Window = MyWindow()
sys.exit(App.exec_())
if __name__ == "__main__":
main()
以下のサンプルコードでは、ステータスバーにデジタル時計を表示している。
# - * - coding: utf8 - * -
import sys
import datetime # 時計を表示するために必要
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
# QMainWindowクラスの使用
class MyWindow(QMainWindow):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.title = "ウィンドウのタイトル"
self.width = 500
self.height = 400
self.setWindowTitle(self.title)
self.setGeometry(0, 0, self.width, self.height)
self.show()
timer = QTimer(self)
timer.timeout.connect(self.getDateTime)
timer.start(1000) # 1000ミリ秒
def getDateTime(self):
dt = datetime.datetime.today()
dt_str = dt.strftime("%Y年%m月%d日 %H時%M分%S秒")
self.statusBar().showMessage("ステータスバーの時計" + " " + dt_str)
def main():
App = QApplication(sys.argv)
Window = MyWindow()
sys.exit(App.exec_())
if __name__ == "__main__":
main()
上記のサンプルコードでは、シグナルとスロットと呼ばれる機能を使用している。
オブジェクトは、何らかのイベントが生じた際にシグナルを発生させて、それをスロットの関数が受け取ることで画面上の情報を更新することができる。
ここでは、QTimerのインスタンスを生成した後、timeoutシグナルに対してgetDateTimeメソッドをスロットとして呼び出して、それらをconnectで結び付けている。
timer = QTimer(self)
timer.timeout.connect(self.getDateTime)
timer.start(1000)
メニューバーの表示
このセクションでは、メニューバーを表示する。
以下のサンプルコードでは、メニューバーと[ファイル]メニューおよび[終了]サブメニューを表示して、
[終了]サブメニューにソフトウェアを終了するメニューバーアクションを定義している。
# - * - coding: utf8 - * -
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
# QMainWindowクラスの使用
class MyWindow(QMainWindow):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.title = "ウィンドウのタイトル"
self.width = 500
self.height = 400
# メニューバーの定義
exitAction = QAction('&終了', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('終了する')
exitAction.triggered.connect(qApp.quit)
# メニューバーアクションの追加
menubar = self.menuBar()
fileMenu = menubar.addMenu('&ファイル')
fileMenu.addAction(exitAction)
self.setWindowTitle(self.title)
self.setGeometry(0, 0, self.width, self.height)
# ステータスバー
self.statusBar()
self.show()
def main():
App = QApplication(sys.argv)
Window = MyWindow()
sys.exit(App.exec_())
if __name__ == "__main__":
main()