MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
PyQtの基礎 - 画面のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
PyQtの基礎 - 画面
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == <br><br> == 画面の表示 == まず、PyQtで基本となるものは、画面を表示することである。<br> 以下のサンプルコードでは、<code>QWidget</code>クラスを使用して画面のみを表示している。<br> <source lang="python"> # - * - 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() </source> <br><br> == ステータスバーの表示 == ここでは、画面にステータスバーを表示する方法を記載する。<br> ステータスバーには、現在の画面内の情報等を表示することが可能である。<br> <br> 上記のセクションでは、<code>QWidget</code>クラスを継承したMyWindowクラスを作成して画面を表示しているが、<br> ステータスバーを表示するには、<code>QMainWindow</code>クラスを継承して画面を作成する必要がある。<br> <br> <code>QWidget</code>クラスや<code>QDialog</code>クラスを使用して画面を作成することもできるが、<br> メイン画面においては<code>QMainWindow</code>クラスを使用することを推奨する。<br> それは、<u><code>QMainWindow</code>クラスは、以下に示すメイン画面を作成するための機能を提供しているからである。</u><br> * メニューバー * ツールバー * ドックウィジェット * 中央ウィジェット * ステータスバー <br> 以下のサンプルコードでは、ステータスバーを表示している。<br> <source lang="python"> # - * - 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() </source> <br> 以下のサンプルコードでは、ステータスバーにデジタル時計を表示している。<br> <source lang="python"> # - * - 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() </source> <br> 上記のサンプルコードでは、シグナルとスロットと呼ばれる機能を使用している。<br> オブジェクトは、何らかのイベントが生じた際にシグナルを発生させて、それをスロットの関数が受け取ることで画面上の情報を更新することができる。<br> ここでは、QTimerのインスタンスを生成した後、timeoutシグナルに対してgetDateTimeメソッドをスロットとして呼び出して、それらをconnectで結び付けている。<br> <source lang="python"> timer = QTimer(self) timer.timeout.connect(self.getDateTime) timer.start(1000) </source> <br><br> == メニューバーの表示 == このセクションでは、メニューバーを表示する。<br> <br> 以下のサンプルコードでは、メニューバーと[ファイル]メニューおよび[終了]サブメニューを表示して、<br> [終了]サブメニューにソフトウェアを終了するメニューバーアクションを定義している。<br> <source lang="python"> # - * - 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() </source> <br><br> == レイアウト == PyQtのレイアウトは、QHBoxとQVBoxの2種類(縦(horizon)と横(vertical))が存在する。<br> 指定が無い場合、QHBox(縦のレイアウト)が自動的に配置される。<br> <br> 以下のサンプルコードにおいて、13行目の<code>self.upper.stateChanged.connect(self.uppercase)</code>では、<br> <code>connect</code>により、"Upper"チェックボックスにチェックが入っている時、<code>uppercase</code>関数にコネクトする。<br> <br> <code>addWiget</code>関数では、upper_aチェックボックスとupper_bチェックボックスを指定している。<br> また、<code>addWiget</code>関数では、<code>vertical</code>を指定している。<br> <br> <code>vertical</code>には<code>QVBoxLayout(縦のレイアウト)</code>を指定しているので、チェックボックスが縦に並ぶ。<br> グループ化されていないので、複数のチェックボックスを選択することができる。<br> <br> 36行目において、チェックボックスにチェックが入力されていない時は、<br> <code>removeWiget</code>関数により、チェックを入力するたびにチェックボックスが追加される現象を防いでいる。<br> <source lang="python"> import sys import sip from PyQt5.QtCore import * from PyQt5.QtWidgets import * class MainWindow(QWidget): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) # 上のチェックボックス self.upper = QCheckBox('Upper', self) self.upper.move(100, 30) self.upper.stateChanged.connect(self.uppercase) # 横のレイアウト self.horizon = QHBoxLayout() # 縦のレイアウト self.vertical = QVBoxLayout() self.horizon.addLayout(self.vertical) self.setLayout(self.horizon) self.setGeometry(300, 50, 400, 350) self.setWindowTitle('QCheckBox') def uppercase(self): if(self.upper.isChecked()): self.upper_a = QCheckBox('A', self) self.vertical.addWidget(self.upper_a) self.upper_b = QCheckBox('B', self) self.vertical.addWidget(self.upper_b) else: self.vertical.removeWidget(self.upper_a) self.vertical.removeWidget(self.upper_b) if __name__ == '__main__': App = QApplication(sys.argv) Window = MainWindow() Window.show() sys.exit(App.exec_()) </source> <br><br> __FORCETOC__ [[カテゴリ:Python]]
PyQtの基礎 - 画面
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse