PyQt5之停靠控件和滚动条控件
一、QDockWidget停靠控件
QDockWidget是一个可以停靠在QMainWidget内的窗口控件,它可以保持在浮动状态或者指定位置作为子窗口添加到主窗口中,QMainWidget类的主窗口对象保留有一个用于停靠窗口的区域。
QDockWidget类中的常用方法
方法 | 描述 |
---|---|
setWidget() | 在Dock窗口区域设置QWidget |
setFloating() | 设置Dock窗口是否可以浮动,如果设置为True,则表示可以浮动 |
setAllowedAreas() | 设置窗口可以停靠的区域:LeftDockWidgetArea(左边停靠区域)、RightDockWidgetArea(右边停靠区域)、TopDockWidgetArea(顶部停靠区域)、BottomDockWidgetArea(底部停靠区域)、NoDockWidgetArea(不显示Widget) |
setFeatures() | 设置停靠窗口的功能属性:DockWidgetClosable(可关闭)、DockWidgetMovable(可移动)、DockWidgetFloatable(可漂浮)、DockWidgetVerticalTitleBar(在左边显示垂直的标签栏)、AllDockWidgetFeatures(具有前三种属性的所有功能)、NoDockWidgetFeatures(无法关闭,不能移动,不能漂浮) |
QDockWidget的使用
import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Demo(QMainWindow):
def __init__(self):
super().__init__()
self.setGeometry(100, 50, 500, 400)
self.setWindowTitle('QDockWidget的使用')
layout = QHBoxLayout()
bar = self.menuBar()
file = bar.addMenu('File')
file.addAction("New")
file.addAction("Save")
file.addAction("Quit")
#创建停靠窗口
self.items = QDockWidget('Dockable',self)
self.listwidget = QListWidget()
self.listwidget.addItem("item1")
self.listwidget.addItem("item2")
self.listwidget.addItem("item3")
self.items.setWidget(self.listwidget)
self.items.setFloating(False)
self.setCentralWidget(QTextEdit())
self.addDockWidget(Qt.RightDockWidgetArea,self.items)
self.setLayout(layout)
if __name__ == "__main__":
app = QApplication(sys.argv)
form = Demo()
form.show()
sys.exit(app.exec_())
运行效果如下:
二、QScrollBar滚动条控件
QScrollBar提供了水平的或垂直的滚动条,可以扩大当前窗口的有效装载面积。
QScrollBar类中的常用信号
信号 | 含义 |
---|---|
valueChanged | 当滑动条的值改变时发射此信号 |
sliderMoved | 当用户拖动滑块时发射此信号 |
QScrollBar的使用
import sys
from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Demo(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(100, 50, 500, 400)
self.setWindowTitle('QScrollBar的使用')
layout = QHBoxLayout()
self.l1 = QLabel('拖动滑块改变颜色')
self.l1.setFont(QFont('Arial',16))
layout.addWidget(self.l1)
self.s1 = QScrollBar()
self.s1.setMaximum(255)
self.s1.sliderMoved.connect(self.sliderval)
self.s2 = QScrollBar()
self.s2.setMaximum(255)
self.s2.sliderMoved.connect(self.sliderval)
self.s3 = QScrollBar()
self.s3.setMaximum(255)
self.s3.sliderMoved.connect(self.sliderval)
layout.addWidget(self.s1)
layout.addWidget(self.s2)
layout.addWidget(self.s3)
self.setLayout(layout)
def sliderval(self):
print(self.s1.value(),self.s2.value(),self.s3.value())
palette = QPalette()
c = QColor(self.s1.value(),self.s2.value(),self.s3.value(),255)
palette.setColor(QPalette.Foreground,c)
self.l1.setPalette(palette)
if __name__ == "__main__":
app = QApplication(sys.argv)
form = Demo()
form.show()
sys.exit(app.exec_())
运行效果如下: