- PyQt 教程
- PyQt - 首頁
- PyQt - 簡介
- PyQt - 環境配置
- PyQt - Hello World
- PyQt - 主要類
- PyQt - 使用 Qt Designer
- PyQt - 元物件
- PyQt 訊號與槽
- PyQt - 訊號和槽
- PyQt - 支援和訊號
- PyQt - 未繫結和已繫結訊號
- PyQt - 使用 PyQtSignal 建立新的訊號
- PyQt - 連線、斷開和發射訊號
- PyQt - 槽裝飾器
- PyQt - 槽連線
- PyQt 佈局
- PyQt - 佈局管理
- PyQt - QBoxLayout
- PyQt - QGridLayout
- PyQt - QFormLayout
- PyQt - QHBoxLayout
- PyQt - QVBoxLayout
- PyQt - QStackedLayout
- PyQt - QGraphicsGridLayout
- PyQt - QGraphicsAnchorLayout
- PyQt - QGraphicsLayout
- PyQt - QGraphicsLinearLayout
- PyQt 基本控制元件
- PyQt - 基本控制元件
- PyQt - QLabel 控制元件
- PyQt - QLineEdit 控制元件
- PyQt - QPushButton 控制元件
- PyQt - QRadioButton 控制元件
- PyQt - QCheckBox 控制元件
- PyQt - QComboBox 控制元件
- PyQt - QSpinBox 控制元件
- PyQt - QMessageBox
- PyQt - QDialogButtonBox 控制元件
- PyQt - QFontComboBox 控制元件
- PyQt - QDoubleSpinBox 控制元件
- PyQt - QToolBox 控制元件
- PyQt - QDialog 類
- PyQt - QMessageBox
- PyQt - 多文件介面
- PyQt - 拖放操作
- PyQt 繪圖 API
- PyQt - 繪圖 API
- PyQt 資料庫
- PyQt - 資料庫操作
- PyQt 核心知識
- PyQt - BrushStyle 常量
- PyQt - QClipboard
- PyQt - QPixmap 類
- PyQt 有用資源
- PyQt - 快速指南
- PyQt - 有用資源
- PyQt - 討論
PyQt - QGraphicsAnchorLayout
在 GUI 構建中,錨佈局是一種佈局管理器,允許使用者相對於容器邊緣來定位和調整控制元件的大小。當我們想要保持控制元件的位置而不受視窗整體大小的影響時,它非常有用。控制元件可以錨定到容器的頂部、左側、右側、底部和中心。
在 PyQt 中,類 QGraphicsAnchorLayout 提供了一個佈局,可以在圖形檢視中將控制元件相互錨定。
錨佈局使開發人員能夠指定控制元件相對於佈局和其他控制元件的定位。使用 addAnchor()、addAnchors() 或 addCornerAnchors() 向佈局新增錨點。
使用 anchor() 函式訪問佈局中已存在的錨點。錨定的專案將根據需要自動新增到佈局中和從佈局中移除。
錨點總是建立在物件的邊緣之間,包括“中心”作為邊緣。
以下是一個示例:
layout.addAnchor(b, Qt.AnchorLeft, a, Qt.AnchorRight) layout.addAnchor(b, Qt.AnchorTop, a, Qt.AnchorBottom)
在上圖中,專案 a 的右邊緣連線到專案 b 的左邊緣,而專案 a 的下邊緣連線到專案 b 的上邊緣。這導致專案 b 對角線位於專案 a 的右下方。
錨點用於匹配控制元件的寬度或高度。因此,使用 addAnchor() 函式非常方便。
示例
以下示例演示了 QGraphicsAnchorLayout 的程式碼片段,用於構建容器或框組。
import sys from PyQt5.QtCore import QSizeF, Qt from PyQt5.QtWidgets import (QApplication, QGraphicsAnchorLayout, QGraphicsProxyWidget, QGraphicsScene, QGraphicsView, QGraphicsWidget, QPushButton, QSizePolicy) def createItem(minimum, preferred, maximum, name): wid = QGraphicsProxyWidget() wid.setWidget(QPushButton(name)) wid.setMinimumSize(minimum) wid.setPreferredSize(preferred) wid.setMaximumSize(maximum) wid.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) return wid if __name__ == '__main__': app = QApplication(sys.argv) scene = QGraphicsScene() scene.setSceneRect(0, 0, 800, 480) minSize = QSizeF(30, 100) prefSize = QSizeF(210, 100) maxSize = QSizeF(300, 100) a = createItem(minSize, prefSize, maxSize, "BOX 1") b = createItem(minSize, prefSize, maxSize, "BOX 2") c = createItem(minSize, prefSize, maxSize, "BOX 3") d = createItem(minSize, prefSize, maxSize, "BOX 4") e = createItem(minSize, prefSize, maxSize, "BOX 5") f = createItem(QSizeF(30, 50), QSizeF(150, 50), maxSize, "BOX 6") g = createItem(QSizeF(30, 50), QSizeF(30, 100), maxSize, "BOX 7") lay = QGraphicsAnchorLayout() lay.setSpacing(0) wid2 = QGraphicsWidget(None, Qt.Window) wid2.setPos(20, 20) wid2.setLayout(lay) # Vertical lay.addAnchor(a, Qt.AnchorTop, lay, Qt.AnchorTop) lay.addAnchor(b, Qt.AnchorTop, lay, Qt.AnchorTop) lay.addAnchor(c, Qt.AnchorTop, a, Qt.AnchorBottom) lay.addAnchor(c, Qt.AnchorTop, b, Qt.AnchorBottom) lay.addAnchor(c, Qt.AnchorBottom, d, Qt.AnchorTop) lay.addAnchor(c, Qt.AnchorBottom, e, Qt.AnchorTop) lay.addAnchor(d, Qt.AnchorBottom, lay, Qt.AnchorBottom) lay.addAnchor(e, Qt.AnchorBottom, lay, Qt.AnchorBottom) lay.addAnchor(c, Qt.AnchorTop, f, Qt.AnchorTop) lay.addAnchor(c, Qt.AnchorVerticalCenter, f, Qt.AnchorBottom) lay.addAnchor(f, Qt.AnchorBottom, g, Qt.AnchorTop) lay.addAnchor(c, Qt.AnchorBottom, g, Qt.AnchorBottom) # Horizontal lay.addAnchor(lay, Qt.AnchorLeft, a, Qt.AnchorLeft) lay.addAnchor(lay, Qt.AnchorLeft, d, Qt.AnchorLeft) lay.addAnchor(a, Qt.AnchorRight, b, Qt.AnchorLeft) lay.addAnchor(a, Qt.AnchorRight, c, Qt.AnchorLeft) lay.addAnchor(c, Qt.AnchorRight, e, Qt.AnchorLeft) lay.addAnchor(b, Qt.AnchorRight, lay, Qt.AnchorRight) lay.addAnchor(e, Qt.AnchorRight, lay, Qt.AnchorRight) lay.addAnchor(d, Qt.AnchorRight, e, Qt.AnchorLeft) lay.addAnchor(lay, Qt.AnchorLeft, f, Qt.AnchorLeft) lay.addAnchor(lay, Qt.AnchorLeft, g, Qt.AnchorLeft) lay.addAnchor(f, Qt.AnchorRight, g, Qt.AnchorRight) scene.addItem(wid2) scene.setBackgroundBrush(Qt.lightGray) view = QGraphicsView(scene) view.show() sys.exit(app.exec_())
輸出
以上程式碼產生以下輸出:
廣告