PyQt5クイックスタート(4)PyQt5高度なウィンドウコンポーネント

PyQt5クイックスタート(4)PyQt5高度なウィンドウコンポーネント

、QTableView

1、QTableViewプロフィール

データモデルからQTableView結合データソースてsetModelによって定義されたコンテンツを表示するために使用されてもよい、QAbstractItemViewが達成クラスによって定義されたインタフェースは、派生クラスQAbstractItemModelモデルによって提供されるデータを表示することができます。

2、標準モデル

QStringListModel文字列リストのデータモデル
QStandardItemModel標準モデルデータ項目、保存されたデータの任意の階層構造
QDirModelファイルシステムディレクトリモデル
QSqlQueryModel SQLクエリ結果セットデータモデル
QSqlTableModel SQL形式のデータモデル
QSqlRelationTableModelリレーショナルSQL形式のデータモデル
QSortFilterProxyModelソートフィルタリングプロキシモデル

3、QTableView例

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTableView, QHBoxLayout
from PyQt5.QtGui import QStandardItemModel,QStandardItem

class MainWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.model = QStandardItemModel(4, 4)
        headers = ["column1", "column2", "column3", "column4"]
        self.model.setHorizontalHeaderLabels(headers)
        self.tableView = QTableView(self)
        # 最后一列拉伸
        self.tableView.horizontalHeader().setStretchLastSection(True)
        self.tableView.setModel(self.model)

        self.layout = QHBoxLayout()
        self.layout.addWidget(self.tableView)
        self.setLayout(self.layout)

    def initUI(self):
        # 数据项增加
        for row in range(10):
            for column in range(4):
                item = QStandardItem()
                item.setText(str(column))
                self.model.setItem(row, column, item)
        # 增加一行
        for row in range(5):
            items = []
            for column in range(4):
                items.append(QStandardItem(str(column)))
            self.model.appendRow(items)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWidget()
    window.initUI()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

二、QTreeView

1、QTreeViewプロフィール

QTreeViewは、QAbstractItemViewから継承された、ツリー構造の図であり、モデル/ビューフレームワークの一部です。

2、QTreeView例

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTreeView, QHBoxLayout
from PyQt5.QtGui import QStandardItemModel,QStandardItem

class MainWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.model = QStandardItemModel()
        self.treeView = QTreeView(self)
        self.treeView.setModel(self.model)

        self.layout = QHBoxLayout()
        self.layout.addWidget(self.treeView)
        self.setLayout(self.layout)

    def initUI(self):
        root = self.model.invisibleRootItem()
        for i in range(4):
            item = QStandardItem(str(i))
            for j in range(3):
                chidItem = QStandardItem(str(j))
                item.setChild(j, chidItem)
            root.setChild(i, item)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWidget()
    window.initUI()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

三、QListView

1、QListViewプロフィール

QListViewリストビュー、QAbstractItemViewから継承され、ヘッダとボックスが表示されていない、のQtのモデル/ビュー構造のため、より柔軟な方法を提供します。

2、QListView例

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QListView, QHBoxLayout
from PyQt5.QtGui import QStandardItemModel,QStandardItem

class MainWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.model = QStandardItemModel()
        self.listView = QListView(self)
        self.listView.setModel(self.model)

        self.layout = QHBoxLayout()
        self.layout.addWidget(self.listView)
        self.setLayout(self.layout)

    def initUI(self):
        root = self.model.invisibleRootItem()
        for i in range(10):
            item = QStandardItem(str(i))
            root.setChild(i, item)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWidget()
    window.initUI()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

四、QTableWidget

1、QTableWidgetプロフィール

 QTableWidgetテーブルセルアセンブリはQTableViewカスタムデータは、コンテンツモデルを表示するために使用することができ、あなただけQTableWidget標準データモデルを使用することができ、そしてどのセルデータオブジェクトがQTableWidgetItem、QTableWidgetItemを表すために使用されるテーブルを実現し、QTableViewから継承されましたセル内で、テーブル全体は、細胞によって細胞を構築する必要があります。

2、QTableWidget例

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QTableWidget, QTableWidgetItem
from PyQt5.QtCore import Qt

class MainWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.tableWidget = QTableWidget(self)

        self.layout = QHBoxLayout()
        self.layout.addWidget(self.tableWidget)
        self.setLayout(self.layout)

    def initUI(self):
        self.tableWidget.setRowCount(10)
        self.tableWidget.setColumnCount(5)
        for row in range(10):
            for column in range(5):
                item = QTableWidgetItem()
                # 设置数据项显示数据角色的数据
                item.setData(Qt.DisplayRole, column)
                self.tableWidget.setItem(row, column, item)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWidget()
    window.initUI()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

五、QTreeWidget

1、QTreeWidgetプロフィール

QTreeWidget QTreeViewツリーはクラスのセルアセンブリから継承し、簡単なツリー構造のリストを作成するために使用することができます。ツリー構造とQTreeWidgetItem QTreeWidgetクラスのクラスによって達成、クラスがQTreeWidgetItemノードを追加実装します。

2、QTreeWidget例

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QTreeWidget, QTreeWidgetItem
from PyQt5.QtCore import Qt

class MainWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.treeWidget = QTreeWidget(self)

        self.layout = QHBoxLayout()
        self.layout.addWidget(self.treeWidget)
        self.setLayout(self.layout)

    def initUI(self):
        root = self.treeWidget.invisibleRootItem()
        for row in range(4):
            item = QTreeWidgetItem()
            item.setData(0, Qt.DisplayRole, row)
            root.addChild(item)
            # 设置数据项显示数据角色的数据
            root.addChild(item)
            for column in range(3):
                child = QTreeWidgetItem()
                child.setData(0, Qt.DisplayRole, column)
                item.addChild(child)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWidget()
    window.initUI()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

六、QListWidget

1、QListWidgetプロフィール

アセンブリQListViewリストから継承QListWidgetセルは、リストを表示することができる各項目は、リストはQListWidgetItemの一例であり、各項目はQListWidgetItemによって操作されてもよいです。画像とテキストがQListWidgetItemで各項目を設定することができます。

2、QListWidget例

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QListWidget, QListWidgetItem
from PyQt5.QtCore import Qt

class MainWidget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.listWidget = QListWidget(self)

        self.layout = QHBoxLayout()
        self.layout.addWidget(self.listWidget)
        self.setLayout(self.layout)

    def initUI(self):
        for i in range(10):
            item = QListWidgetItem()
            # 设置数据项显示数据角色的数据
            item.setData(Qt.DisplayRole, i)
            self.listWidget.addItem(item)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWidget()
    window.initUI()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

七、QStackedWidget

1、QStackedWidgetプロフィール

QStackedWidget容器アセンブリがスタックされ、開発者がそれによって制御を切り替える、raiseWidgetスタックの他の制御スタックのトップを使用するスタックQStackedWidget表示制御機能の上部のみ、スタック管理コントロールを使用することができます。

2、QStackedWidget例

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QStackedWidget, QPushButton

class MainWidget(QWidget):
    currentIndex = 0
    N = 5

    def __init__(self, parent=None):
        super().__init__(parent)
        self.stackWidget = QStackedWidget(self)
        self.layout = QVBoxLayout()

        button = QPushButton("Next")
        button.clicked.connect(self.onNext)
        self.layout.addWidget(self.stackWidget)
        self.layout.addWidget(button)
        self.setLayout(self.layout)

    def initUI(self):
        for i in range(self.N):
            button = QPushButton()
            button.setText("Button {0}".format(i))
            self.stackWidget.addWidget(button)

    def onNext(self):
        self.currentIndex = self.currentIndex + 1
        self.currentIndex = self.currentIndex % self.N
        self.stackWidget.setCurrentIndex(self.currentIndex)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWidget()
    window.initUI()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

八、QDockWidget

1、QDockWidgetプロフィール

QDockWidgetは、フォーム成分は二次形式は、インタフェースに表示される主ように、デスクトップ上にフローティングトップレベルウィンドウとして使用することができるドッキングされています。QDockWidgetは、ツールバーとツールバーのウィンドウタイトル、浮動ボタンと閉じるボタンを表示するためのコンテンツ領域を含みます。QDockWidget子ウィンドウは、()は子ウィジェットを提供setWidgetことで外装部材としてすることができます。
PyQt5クイックスタート(4)PyQt5高度なウィンドウコンポーネント

2、QDockWidget例

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QTextEdit
from PyQt5.QtCore import Qt

class MainWindow(QMainWindow):

    def __init__(self, parent=None):
        super().__init__(parent)
        # central widget
        self.centralWidget = QTextEdit()
        self.centralWidget.setText("Main Window")
        self.centralWidget.setAlignment(Qt.AlignCenter)
        self.setCentralWidget(self.centralWidget)
        # left dock
        dock = QDockWidget("Window1", self)
        dock.setFeatures(QDockWidget.DockWidgetMovable)
        dock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
        textEdit = QTextEdit()
        textEdit.setText("Window1,The dock widget can be moved between docks and users")
        dock.setWidget(textEdit)
        self.addDockWidget(Qt.LeftDockWidgetArea, dock)
        # right dock
        dock =QDockWidget("Window2", self)
        dock.setFeatures(QDockWidget.DockWidgetClosable | QDockWidget.DockWidgetFloatable)
        textEdit =QTextEdit()
        textEdit.setText("Window2,The dock widget can be detac from the main window,""and float as an independent window,and can be closed")
        dock.setWidget(textEdit)
        self.addDockWidget(Qt.RightDockWidgetArea, dock)
        # right dock
        dock =QDockWidget("Window3", self)
        dock.setFeatures(QDockWidget.AllDockWidgetFeatures)
        textEdit = QTextEdit()
        textEdit.setText("Window3,The dock widget can be closed,moved,and float")
        dock.setWidget(textEdit)
        self.addDockWidget(Qt.RightDockWidgetArea, dock)

        self.setWindowTitle("DockWidget Demo")
        self.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

PyQt5クイックスタート(4)PyQt5高度なウィンドウコンポーネント

ナイン、QMidArea

1、QMidAreaプロフィール

QMdiAreaコンポーネントは、主にタスクを完了するために複数のファイルを使用する必要性に適用されるマルチドキュメントインターフェイス、MDIすなわちマルチドキュメントインターフェイス、です。QMainWindowは、あまりありませんが、主にアプリケーションのシナリオを提出するSDI(信号ドキュメントインターフェイス、シングルドキュメントインターフェイス)、オープン各ファイルがウィンドウを占めて適用されています。
    QMdiSubWindowクラスは、主にMDI子フォームのインスタンスを作成するために使用される、QWidgetから継承します。

2、QMidArea例

import sys
from PyQt5.QtWidgets import QApplication, QMdiArea, QMdiSubWindow

class MainWindow(QMdiArea):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.addSubWindow(QMdiSubWindow())
        self.addSubWindow(QMdiSubWindow())
        self.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

テン、QScrollArea

1、QScrollAreaプロフィール

フレームのサイズを超える子コントロールのサイズは、スクロールバーを使用することができれば、サブフレームコントロールの内容を表示するために使用されるエリアのコンポーネントをスクロールQScrollArea、簡単に全体の子コントロールを表示します。QScrollAreaは、任意のQWidgetのスクロールバーを追加する与えることができますが、一般的には、スクロールバーを追加するためのカスタムフォームは表示されません。

2、QScrollArea例

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QScrollArea, QPushButton, QTableView

class MainWidget(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)
        self.layout = QVBoxLayout()
        # 滚动区创建
        self.scrollArea = QScrollArea()
        # 容器组件
        widget  = QWidget()
        layout = QVBoxLayout()
        tableView = QTableView()
        button = QPushButton("OK")
        layout.addWidget(tableView)
        layout.addWidget(button)
        widget.setLayout(layout)
        # 设置滚动区的容器组件
        self.scrollArea.setWidget(widget)
        self.layout.addWidget(self.scrollArea)
        self.setLayout(self.layout)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWidget()
    window.resize(400, 200)
    window.show()

    sys.exit(app.exec_())

おすすめ

転載: blog.51cto.com/9291927/2423254