1. 程式人生 > 程式設計 >PyQt5 QDockWidget控制元件應用詳解

PyQt5 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_())

不重寫QDockWidget類

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


class DockDemo(QMainWindow):
  def __init__(self):
    super().__init__()
    self.docker1=QDockWidget('Docker1',self)
    self.docker2=QDockWidget('Docker2',self)
    self.textEdit=QTextEdit()
    self.setCentralWidget(self.textEdit)
    self.btn1=QPushButton('btn1')
    self.btn2=QPushButton('btn2')
    self.btn1.clicked.connect(self.btn1fun)
    self.btn2.clicked.connect(self.btn2fun)
    self.docker1.setWidget(self.btn1)
    self.docker2.setWidget(self.btn2)
    self.addDockWidget(Qt.RightDockWidgetArea,self.docker1)
    self.addDockWidget(Qt.LeftDockWidgetArea,self.docker2)
    self.setWindowTitle('Dock 例子')
    self.resize(400,300)
  def btn1fun(self):
    self.textEdit.setText('btn1')
    self.docker2.setFloating(True)#開啟懸浮狀態
  def btn2fun(self):
    self.textEdit.setText('btn2')
    self.docker1.setFloating(True)
    
if __name__ == '__main__':
  app=QApplication(sys.argv)
  demo=DockDemo()
  demo.show()
  sys.exit(app.exec_())

效果:

PyQt5 QDockWidget控制元件應用詳解

重寫QDockWidget類

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QMainWindow,QApplication,QWidget,QVBoxLayout


class docker(QDockWidget):
  def __init__(self,parent):
    super().__init__(parent)
    self.btn1 = QPushButton('btn1')
    self.btn2 = QPushButton('btn2')
    self.vbox = QVBoxLayout()
    self.vbox.addWidget(self.btn1)
    self.vbox.addWidget(self.btn2)
    self.wgt = QWidget()
    self.wgt.setLayout(self.vbox)
    self.setWidget(self.wgt)

class DockDemo(QMainWindow):
  def __init__(self):
    super().__init__()
    self.docker = docker(self)
    self.textEdit = QTextEdit()
    self.setCentralWidget(self.textEdit)
    self.docker.btn1.clicked.connect(self.btn1fun)
    self.docker.btn2.clicked.connect(self.btn2fun)
    self.addDockWidget(Qt.RightDockWidgetArea,self.docker)
    self.setWindowTitle('Dock 例子')
    self.resize(400,300)

  def btn1fun(self):
    self.textEdit.setText('btn1')

  def btn2fun(self):
    self.textEdit.setText('btn2')


if __name__ == '__main__':
  app = QApplication(sys.argv)
  demo = DockDemo()
  demo.show()
  sys.exit(app.exec_())

效果:

PyQt5 QDockWidget控制元件應用詳解

到此這篇關於PyQt5 QDockWidget控制元件應用詳解的文章就介紹到這了,更多相關PyQt5 QDockWidget內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!