サーチ…


備考

このセクションでは、pyqt5の概要と、開発者がpyqt5を使用する理由について概説します。

また、pyqt5内の大きなテーマについても言及し、関連するトピックにリンクする必要があります。 pyqt5のドキュメンテーションは新しいので、これらの関連トピックの初期バージョンを作成する必要があるかもしれません。

インストールまたはセットアップ

  1. Anacondaをインストールする(PyQt5はビルドイン)、特にWindowsユーザ向けです。
  2. PyCharmにQtDesignerとQtUIConvertを統合する(外部ツール)
    • PyCharm Settings > Tools > External Tools開く
    • 作成ツール(QtDesigner) - * .uiファイルの編集に使用
    • 作成ツール(PyUIConv) - * .uiを* .pyに変換するために使用
  3. デモを書く
    • 外部ツールによる新しいwindow.ui(QtDesigner)
    • 外部ツール(PyUIConv)でwindow.pyに変換する
    • デモ
      import sys
      from PyQt5.QtWidgets import QApplication,QMainWindow
      from window import Ui_MainWindow
      
      if __name__ == '__main__':
          app = QApplication(sys.argv)
          w = QMainWindow()
          ui = Ui_MainWindow()
          ui.setupUi(w)
          w.show()
          sys.exit(app.exec_())
      

Hello Worldの例

この例では、レイアウト内にボタンとライン編集を含む簡単なウィンドウを作成します。また、信号をスロットに接続する方法も示されているため、ボタンをクリックするとテキストが行編集に追加されます。

import sys
from PyQt5.QtWidgets import QApplication, QWidget


if __name__ == '__main__':
    
    app = QApplication(sys.argv)

    w = QWidget()
    w.resize(250, 150)
    w.move(300, 300)
    w.setWindowTitle('Hello World')
    w.show()
    
    sys.exit(app.exec_())

分析

app = QtWidgets.QApplication(sys.argv)

すべてのPyQt5アプリケーションは、アプリケーションオブジェクトを作成する必要があります。 sys.argvパラメータは、コマンドラインからの引数のリストです。 Pythonスクリプトはシェルから実行できます。

w = QWidget()

QWidgetウィジェットは、PyQt5のすべてのユーザインタフェースオブジェクトの基本クラスです。 QWidgetのデフォルトのコンストラクタを提供します。デフォルトのコンストラクタには親がありません。親を持たないウィジェットはウィンドウと呼ばれます。

w.resize(250, 150)

resize()メソッドは、ウィジェットのサイズを変更します。幅250ピクセル、高さ150ピクセルです。

w.move(300, 300)

move()メソッドは、ウィジェットをx = 300、y = 300の座標で画面上の位置に移動します。

w.setWindowTitle('Hello World')

ここでは、ウィンドウのタイトルを設定します。タイトルはタイトルバーに表示されます。

w.show()

show()メソッドはウィジェットを画面に表示します。ウィジェットはまずメモリに作成され、後で画面に表示されます。

sys.exit(app.exec_())

最後に、アプリケーションのメインループに入ります。この時点からイベント処理が開始されます。メインループはウィンドウシステムからイベントを受け取り、アプリケーションウィジェットにディスパッチします。 mainループは、 exit()メソッドを呼び出すか、メインウィジェットが破棄された場合に終了します。 sys.exit()メソッドは、クリーンな終了を保証します。環境には、アプリケーションの終了方法が通知されます。

exec_()メソッドにはアンダースコアがあります。これは、execがPythonキーワードであるためです。したがって、代わりにexec_()が使用されました。

アプリケーションアイコンの追加

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):
        
        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('web.png'))        
    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_()) 

分析

Pythonの関数引数

Pythonでは、ユーザ定義関数は4種類の引数を取ることができます。

  1. デフォルトの引数:
  • 関数定義

    def defaultArg( name, msg = "Hello!"):

  • 関数呼び出し

    defaultArg( name)

  1. 必要な引数:
  • 関数定義

    def requiredArg (str,num):

  • 関数呼び出し:

    requiredArg ("Hello",12)

  1. キーワード引数:
  • 関数定義

    def keywordArg( name, role ):

  • 関数呼び出し

    keywordArg( name = "Tom", role = "Manager")

    または

    keywordArg( role = "Manager", name = "Tom")

  1. 変数の数:
  • 関数定義

    def varlengthArgs(*varargs):

  • 関数呼び出し

    varlengthArgs(30,40,50,60)

class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        ...

オブジェクト指向プログラミングの3つの重要なことは、クラス、データ、およびメソッドです。ここではExampleという新しいクラスを作成します。 Exampleクラスは、 QWidgetクラスから継承しQWidget 。つまり、 Exampleクラスの最初のコンストラクタと継承したクラスの2番目のコンストラクタという2つのコンストラクタを呼び出します。 super()メソッドは、 Exampleクラスの親オブジェクトを返し、そのコンストラクタを呼び出します。 self変数はオブジェクト自体を参照します。

なぜ私たちは__init__を使用しましたか?

これをチェックしてください:

class A(object):
    def __init__(self):
        self.lst = []

class B(object):
    lst = []

今すぐ試してみてください:

>>> x = B()
>>> y = B()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1, 2]
>>> x.lst is y.lst
True

この:

>>> x = A()
>>> y = A()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1]
>>> x.lst is y.lst
False

このことはクラスBのxがインスタンス化前に確立されていることを意味しますか?

はい、クラス属性です(インスタンス間で共有されます)。一方、クラスAではインスタンス属性です。

self.initUI() 

GUIの作成は、 initUI()メソッドに委譲されます。

self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))  

3つのメソッドはすべてQWidgetクラスから継承されていQWidgetsetGeometry()は2つのことを行います:画面上にウィンドウを配置し、サイズを設定します。最初の2つのパラメータは、ウィンドウのxとyの位置です。 3番目は幅、4番目はウィンドウの高さです。実際には、1つのメソッドでresize() move()メソッドとmove()メソッドを組み合わせています。最後の方法は、アプリケーションのアイコンを設定します。これを行うために、 QIconオブジェクトを作成しました。 QIconは、表示されるアイコンへのパスを受け取ります。

if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

アプリケーションオブジェクトとサンプルオブジェクトが作成されます。メインループが開始されます。

ツールチップを表示する

import sys
from PyQt5.QtWidgets import (QWidget, QToolTip, 
    QPushButton, QApplication)
from PyQt5.QtGui import QFont    


class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
        
    def initUI(self):
        
        QToolTip.setFont(QFont('SansSerif', 10))
        
        self.setToolTip('This is a <b>QWidget</b> widget')
        
        btn = QPushButton('Button', self)
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        btn.resize(btn.sizeHint())
        btn.move(50, 50)       
        
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Tooltips')    
        self.show()
        
        
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

分析

QToolTip.setFont(QFont('SansSerif', 10))

この静的メソッドは、ツールチップをレンダリングするために使用されるフォントを設定します。 10pxのSansSerifフォントを使用します。

self.setToolTip('This is a <b>QWidget</b> widget')

ツールチップを作成するには、 setTooltip()メソッドを呼び出します。リッチテキスト形式を使用できます。

btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')

プッシュボタンウィジェットを作成し、ツールチップを設定します。

btn.resize(btn.sizeHint())
btn.move(50, 50) 

ボタンがサイズ変更され、ウィンドウ上を移動します。 sizeHint()メソッドは、ボタンの推奨サイズを示します。

プロジェクトを変更可能/インストーラにパッケージ化する

cx_Freeze - プロジェクトをexcutable / installerにパッケージ化するツール

  • pipでインストールした後にdemo.pyをパッケージdemo.pyには、以下のsetup.pyが必要です。
import sys
from cx_Freeze import setup, Executable

# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {
    "excludes": ["tkinter"],
    "include_files":[('./platforms','./platforms')] # need qwindows.dll for qt5 application
}

# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(  name = "demo",
        version = "0.1",
        description = "demo",
        options = {"build_exe": build_exe_options},
        executables = [Executable("demo.py", base=base)])
  • ビルドする
python .\setup.py build
  • 次にdist
python .\setup.py bdist_msi


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow