本文介绍什么是QDockWidget以及它使用,顺便介绍一个和QListWidget综合使用的demo.
QDockWidget是软件交互中一种常见的样式,如下图所示: 上图中的VCS Operations这个框就可以认为是一个DockWidget,最大的特点是可以移动。并且可以镶嵌到主窗口里。当你的软件需要有这样一个控件,可以悬浮,并且不影响不占用主界面空间,类似于全局导航,则最适宜用DockWidget了。下面先上源码:
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QDockWidget, QListWidget from PyQt5.QtCore import Qt class MainWindow(QMainWindow): def __init__(self): super().__init__() self.items = ['呵呵', 'aa', 'bb', 'cc', 'dd', 'ee', 'ff','g', 'h', 'i', 'j', 'k', 'l', 'm' ,'m','n','o','p','q','r','s','t'] self.init() self.addDock() def init(self): self.text = QTextEdit('主窗口') self.text.setAlignment(Qt.AlignCenter) self.setCentralWidget(self.text) self.setGeometry(200, 200, 800, 400) self.setWindowTitle('QDockWidget示例') self.show() pass def onDockListIndexChanged(self, index): item = self.items[index] self.text.setText(item) pass def addDock(self): dock1 = QDockWidget('DockWidget') dock1.setFeatures(QDockWidget.DockWidgetFloatable) dock1.setAllowedAreas(Qt.LeftDockWidgetArea) listwidget = QListWidget() listwidget.addItems(self.items) listwidget.currentRowChanged.connect(self.onDockListIndexChanged) dock1.setWidget(listwidget) self.addDockWidget(Qt.LeftDockWidgetArea, dock1) def main(): app = QApplication(sys.argv) window = MainWindow() sys.exit(app.exec_()) # 入口 if __name__ == '__main__': main()之后调用setAllowedAreas()设置这个DockWidget可以在主页面的什么位置,上下左右都可以。 3. 然后调用setWidget()将自己要显示在DockWidget里的内容设进去。最后通过QMainWindow的addDockWidget()添加进去,其中第一个参数是DockWIdget的初始位置。 4. 我们这里新建了一个QListWidget,然后调用listwidget.currentRowChanged.connect(self.onDockListIndexChanged)将list的点击信号传给自定义的函数,函数默认传的是List的索引。当然也可以调用currentTextChanged这个信号,这样传出去的就是一个String。