PyQt5 - QSplitter 控制元件



這是一種更高階的佈局管理器,它允許透過拖動子控制元件之間的邊界來動態更改子控制元件的大小。Splitter 控制元件提供了一個可以拖動的控制代碼來調整控制元件的大小。

QSplitter 物件中的控制元件預設情況下水平排列,儘管方向可以更改為 Qt.Vertical。

以下是 QSplitter 類的 方法和訊號:

序號 方法及描述
1

addWidget()

將控制元件新增到 splitter 的佈局中

2

indexOf()

返回控制元件在佈局中的索引

3

insetWidget()

在指定索引處插入控制元件

4

setOrientation()

將 splitter 的佈局設定為 Qt.Horizontal 或 Qt.Vertical

5

setSizes()

設定每個控制元件的初始大小

6

count()

返回 splitter 控制元件中的控制元件數量

splitterMoved() 是 QSplitter 物件發出的唯一訊號,每當拖動 splitter 控制代碼時都會發出。

示例

以下示例中有一個 splitter 物件 splitter1,其中水平添加了一個框架和一個 QTextEdit 物件。

topleft = QFrame()
textedit = QTextEdit()
splitter1.addWidget(topleft)
splitter1.addWidget(textedit)

此 splitter 物件 splitter1 和一個底部框架物件垂直新增到另一個 splitter splitter2 中。splitter 物件最終新增到頂級視窗中。

bottom = QFrame()
splitter2 = QSplitter(Qt.Vertical)
splitter2.addWidget(splitter1)
splitter2.addWidget(bottom)

hbox.addWidget(splitter2)
self.setLayout(hbox)

完整程式碼如下:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Example(QWidget):
   def __init__(self):
      super(Example, self).__init__()
		self.initUI()
	
   def initUI(self):
      hbox = QHBoxLayout(self)
		
      topleft = QFrame()
      topleft.setFrameShape(QFrame.StyledPanel)
      bottom = QFrame()
      bottom.setFrameShape(QFrame.StyledPanel)
		
      splitter1 = QSplitter(Qt.Horizontal)
      textedit = QTextEdit()
      splitter1.addWidget(topleft)
      splitter1.addWidget(textedit)
      splitter1.setSizes([100,200])
		
      splitter2 = QSplitter(Qt.Vertical)
      splitter2.addWidget(splitter1)
      splitter2.addWidget(bottom)
		
      hbox.addWidget(splitter2)
		
      self.setLayout(hbox)
      QApplication.setStyle(QStyleFactory.create('Cleanlooks'))
		
      self.setGeometry(300, 300, 300, 200)
      self.setWindowTitle('QSplitter demo')
      self.show()
		
def main():
   app = QApplication(sys.argv)
   ex = Example()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   main()

以上程式碼產生以下輸出:

QSplitter Widget Output
pyqt_basic_widgets.htm
廣告

© . All rights reserved.