5.6 分隔器
QSplitter
组件能让用户通过拖拽分割线的方式来改变子窗口大小
程序展示
本例中,创建了用两个分割线隔开的三个QFrame
组件
import sys
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QFrame
from PyQt5.QtWidgets import QSplitter, QStyleFactory, QApplication
from PyQt5.QtCore import Qt
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
hbox = QHBoxLayout(self)
topleft = QFrame(self)
topleft.setFrameShape(QFrame.StyledPanel)
topright = QFrame(self)
topright.setFrameShape(QFrame.StyledPanel)
bottom = QFrame(self)
bottom.setFrameShape(QFrame.StyledPanel)
splitter1 = QSplitter(Qt.Horizontal)
splitter1.addWidget(topleft)
splitter1.addWidget(topright)
splitter2 = QSplitter(Qt.Vertical)
splitter2.addWidget(splitter1)
splitter2.addWidget(bottom)
hbox.addWidget(splitter2)
self.setLayout(hbox)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('QSplitter')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
e = Example()
sys.exit(app.exec_())
程序预览:
代码解释
为了更清楚的看到分割线,我们使用了设置好的子窗口样式
topleft = QFrame(self)
topleft.setFrameShape(QFrame.StyledPanel)
创建一个QSplitter
组件,并在里面添加了两个框架。
splitter1 = QSplitter(Qt.Horizontal)
splitter1.addWidget(topleft)
splitter1.addWidget(topright)
也可以在分割线里面再进行分割。
splitter2 = QSplitter(Qt.Vertical)
splitter2.addWidget(splitter1)
5.7 下拉框
QComboBox
组件能让用户在多个选择项中选择一个
程序展示
本例中,创建了一个下拉框控件和一个标签,标签内容为选定的内容
import sys
from PyQt5.QtWidgets import QWidget, QLabel, QComboBox, QApplication
class Example(QWidget):
def __init__(self):
super().__init__()
self.lable = QLabel(self)
self.lable.move(80, 0)
self.initUI()
def initUI(self):
com = QComboBox(self)
com.addItems(["湖南", "湖北", "河南", "河北"])
com.activated[str].connect(self.valuechange)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('下拉框')
self.show()
def valuechange(self, text):
self.lable.setText(text)
self.lable.adjustSize()
if __name__ == '__main__':
app = QApplication(sys.argv)
e = Example()
sys.exit(app.exec_())
程序预览:
代码解释
创建一个QComboBox
组件和选项
com = QComboBox(self)
com.addItems(["湖南", "湖北", "河南", "河北"])
将每个选项绑定选valuechange
事件
com.activated[str].connect(self.valuechange)
在方法内部,设置标签内容为选定的字符串,然后设置自适应文本大小
def valuechange(self, text):
self.lable.setText(text)
self.lable.adjustSize()