PyQt5高階介面控制元件之QDockWidget(八)
阿新 • • 發佈:2019-02-01
QDockWidget
前言
QDockWidget是一個可以停靠在QMainWindow內的視窗控制元件,它可以保持在浮動狀態或者在指定位置作為子視窗附加到主視窗中,QMainWindow類的主視窗物件保留有一個用於停靠視窗的區域,這個區域在控制元件的中央周圍
QDoCKWidget類中的常用方法
方法 | 描述 |
---|---|
setWidget() | 在Dock視窗區域設定QWidget |
setFloating() | 設定Dock視窗是否可以浮動,如果設定為True,則表示可以浮動 |
setAlllowedAreas() | 設定視窗可以停靠的區域 |
LeftDockWidgetArea:左側停靠區域 | |
RightDockWidgetArea:右側停靠區域 | |
TopDockWidgetArea:頂部停靠區域 | |
BottomDockWidgetArea:底部停靠區域 | |
NoDockWidgetArea:不顯示Widget | |
setFearures() | 設定停靠視窗的功能屬性 |
DockWidgetClosable:可關閉 | |
DockWidgetMovable:可移動 | |
DockWidgetFloatable:可漂浮 | |
DockWidgetVerticalTitleBar:在左邊顯示垂直的標籤欄 | |
AllDockWidgetFeatures:具有前三種屬性的所有功能 | |
NoDockWidgetFeatures:無法關閉,不能懸浮,不能移動 |
例項:QDockWidget的使用
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class DockDemo(QMainWindow):
def __init__(self,parent=None):
super(DockDemo, self).__init__(parent)
#設定水平佈局
layout=QHBoxLayout()
#例項化選單欄
bar=self.menuBar()
#建立主選單file,在其中新增子選單
file=bar.addMenu('File')
file.addAction('New')
file.addAction('Save')
file.addAction('quit')
#建立QDockWidget視窗(標題,自身視窗)
self.items=QDockWidget('Dockable',self)
#例項化列表視窗,新增幾個條目
self.listWidget=QListWidget()
self.listWidget.addItem('Item1')
self.listWidget.addItem('Item2')
self.listWidget.addItem('Item3')
self.listWidget.addItem('Item4')
#在視窗區域設定QWidget,新增列表控制元件
self.items.setWidget(self.listWidget)
#設定dock視窗是否可以浮動,True,執行浮動在外面,自動與主介面脫離,False,預設浮動主視窗內,可以手動脫離
self.items.setFloating(False)
#設定QTextEdit為中央小控制元件
self.setCentralWidget(QTextEdit())
#將視窗放置在中央小控制元件的右側
self.addDockWidget(Qt.RightDockWidgetArea,self.items)
self.setLayout(layout)
self.setWindowTitle('Dock 例子')
if __name__ == '__main__':
app=QApplication(sys.argv)
demo=DockDemo()
demo.show()
sys.exit(app.exec_())
執行程式,顯示效果如下
可以拖動,停靠在上下左右四個地方,也可以懸浮於主視窗外
程式碼分析
在這個例子中,頂層視窗是一個QMainWindow物件,QTextEdit物件是它的中央小控制元件
self.setCentralWidget(QTextEdit())
首先創造可停靠的視窗Item
self.items=QDockWidget('Dockable',self)
然後,在停靠視窗內新增QListWidget物件
self.listWidget=QListWidget()
self.listWidget.addItem('Item1')
self.listWidget.addItem('Item2')
self.listWidget.addItem('Item3')
self.listWidget.addItem('Item4')
#在視窗區域設定QWidget,新增列表控制元件
self.items.setWidget(self.listWidget)
最後,停靠視窗放置在中央小控制元件的右側
self.addDockWidget(Qt.RightDockWidgetArea,self.items)