「PyQtの基礎 - 画面」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == <br><br> == 画面の表示 == まず、PyQtで基本となるものは、画面を表示することである。<br> 以下のサンプルコードでは…」)
 
編集の要約なし
5行目: 5行目:
== 画面の表示 ==
== 画面の表示 ==
まず、PyQtで基本となるものは、画面を表示することである。<br>
まず、PyQtで基本となるものは、画面を表示することである。<br>
以下のサンプルコードでは、画面のみを表示している。<br>
以下のサンプルコードでは、<code>QWidget</code>クラスを使用して画面のみを表示している。<br>
  <source lang="python">
  <source lang="python">
  # - * - coding: utf8 - * -
  # - * - coding: utf8 - * -
43行目: 43行目:
ステータスバーには、現在の画面内の情報等を表示することが可能である。<br>
ステータスバーには、現在の画面内の情報等を表示することが可能である。<br>
<br>
<br>
上記のセクションでは、QWidgetクラスを継承したMainWindowクラスを作成して画面を表示しているが、<br>
上記のセクションでは、<code>QWidget</code>クラスを継承したMyWindowクラスを作成して画面を表示しているが、<br>
ステータスバーを表示するには、QMainWindowクラスを継承して画面を作成する必要がある。<br>
ステータスバーを表示するには、<code>QMainWindow</code>クラスを継承して画面を作成する必要がある。<br>
<br>
<br>
QWidgetクラスやQDialogクラスを使用して画面を作成することもできるが、メイン画面においてはQMainWindowクラスを使用することを推奨する。<br>
<code>QWidget</code>クラスや<code>QDialog</code>クラスを使用して画面を作成することもできるが、<br>
QMainWindowクラスは、以下に示すソフトウェアのメイン画面を作成するための機能を提供しているからである。<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 *
   
   
  # QWidgetクラスの使用
  # QMainWindowクラスの使用
  class MyWindow(QWidget):
  class MyWindow(QMainWindow):
   
   
     def __init__(self, parent=None):
     def __init__(self, parent=None):
97行目: 98行目:
  from PyQt5.QtWidgets import *
  from PyQt5.QtWidgets import *
   
   
  # QWidgetクラスの使用
  # QMainWindowクラスの使用
  class MyWindow(QWidget):
  class MyWindow(QMainWindow):
   
   
     def __init__(self, parent=None):
     def __init__(self, parent=None):
154行目: 155行目:
  from PyQt5.QtWidgets import *
  from PyQt5.QtWidgets import *
   
   
  # QWidgetクラスの使用
  # QMainWindowクラスの使用
  class MyWindow(QWidget):
  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()