一、选项卡控件QTabWidget
1.常用方法
addTab(): 添加一个标签;
insertTab(): 在指定位置插入一个标签;
removeTab(): 删除指定索引的标签;
setTabText(): 设置指定索引标签的文本信息;
tabText(): 获得指定索引标签的文本信息;
setTabIcon(): 设置指定索引标签的图标;
tabIcon(): 获得指定索引标签的图标;
currentWidget(): 获得当前活动标签的部件;
widget(): 获得指定标签索引的部件;
indexOf(): 获得指定部件的标签索引;
count(): 总标签数;
setTabPosition(): 设置标签的显示位置,值为(北:QTabWidget.North, 南:QTabWidget.South, 西:QTabWidget.West, 东:QTabWidget.East);
setTabShape(): 设置标签的形状, 值为:(四边形:QTabWidget.Rounded, 三角形:QTabWidget.Triangular)。
2.常用信号
currentChanged: 当前标签页发生改变后,发射该信号;
tabCloseRequested: 标签页关闭请求时,发射该信号;
tabBarClicked: 单击了标签条,发射该信号;
tabBarDoubleClicked: 双击了标签条,发射该信号。
3.代码
代码概述:
选项卡控件最常用的方法就是addTab(),代码中有使用方法,其他操作同QWidget用法。
import sys
from PyQt5.QtWidgets import *
'''
选项卡控件最常用的方法就是addTab(),代码中有使用方法,其他操作同QWidget用法。
'''
class myWin(QTabWidget):
def __init__(self):
super(myWin, self).__init__()
self.setWindowTitle('选项卡控件')
self.resize(300,80)
self.setUI()
self.setw1_ui()
self.setw2_ui()
self.setw3_ui()
def setUI(self):
self.w1=QWidget()
self.w2 = QWidget()
self.w3 = QWidget()
self.addTab(self.w1, '选项1')
self.addTab(self.w2, '选项2')
self.addTab(self.w3, '选项3')
def setw1_ui(self):
l1=QHBoxLayout()
self.w1.setLayout(l1)
b1=QPushButton('确定')
b2 = QPushButton('取消')
l1.addWidget(b1)
l1.addWidget(b2)
def setw2_ui(self):
l2=QHBoxLayout()
self.w2.setLayout(l2)
lable1=QLabel('姓名')
lineEdit=QLineEdit()
l2.addWidget(lable1)
l2.addWidget(lineEdit)
def setw3_ui(self):
l3=QHBoxLayout()
self.w3.setLayout(l3)
label_sex=QLabel('婚否')
checkBox=QCheckBox()
l3.addWidget(label_sex)
l3.addWidget(checkBox)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = myWin()
window.show()
sys.exit(app.exec())
二、堆栈窗口控件QStackedWidget
代码:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class myWin(QTabWidget):
def __init__(self):
super(myWin, self).__init__()
self.setWindowTitle('列表控件')
self.lay=QHBoxLayout()
self.setLayout(self.lay)
self.setUI_listWidget()
def setUI_listWidget(self):
self.listWidget = QListWidget()
self.lay.addWidget(self.listWidget)
self.listWidget.insertItem(0,'联系方式')
self.listWidget.insertItem(1, '个人信息')
self.listWidget.insertItem(2, '教育程度')
self.listWidget.currentRowChanged.connect(self.k)
self.w1=QWidget()
self.w2 = QWidget()
self.w3 = QWidget()
self.stack=QStackedWidget()
self.stack.addWidget(self.w1)
self.stack.addWidget(self.w2)
self.stack.addWidget(self.w2)
self.lay.addWidget(self.stack)
self.setw1_ui()
self.setw2_ui()
self.setw3_ui()
'''
在 self.listWidget.itemClicked.connect(self.u) 中,当列表控件中的一个项目被点击时,itemClicked 信号会被触发。
而连接到这个信号的槽函数 self.u 会接收到一个参数,这个参数就是被点击的项目对象。在这里,l 就是接收到的被点击的项目对象,通过
它可以获取项目的相关信息。这种情况同样在QComBox,QListView控件中一样存在
'''
def setw1_ui(self):
l1=QHBoxLayout()
self.w1.setLayout(l1)
b1=QPushButton('确定')
b2 = QPushButton('取消')
l1.addWidget(b1)
l1.addWidget(b2)
def setw2_ui(self):
l2=QHBoxLayout()
self.w2.setLayout(l2)
lable1=QLabel('姓名')
lineEdit=QLineEdit()
l2.addWidget(lable1)
l2.addWidget(lineEdit)
def setw3_ui(self):
l3=QHBoxLayout()
self.w3.setLayout(l3)
label_sex=QLabel('婚否')
checkBox=QCheckBox()
l3.addWidget(label_sex)
l3.addWidget(checkBox)
def k(self,m):
print(m)
self.stack.setCurrentIndex(m)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = myWin()
window.show()
sys.exit(app.exec())
三、悬浮窗口QDockWidget
代码:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class myWin(QMainWindow):
def __init__(self):
super(myWin, self).__init__()
self.setWindowTitle('停靠窗口控件')
self.lay=QHBoxLayout()
self.setLayout(self.lay)
self.items=QDockWidget('悬浮窗口',self)
self.listWidget=QListWidget()
self.listWidget.addItem('选项1')
self.listWidget.addItem('选项2')
self.listWidget.addItem('选项3')
self.items.setWidget(self.listWidget)
self.setCentralWidget(QLineEdit())
self.addDockWidget(Qt.RightDockWidgetArea,self.items)
# self.items.setFloating(True)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = myWin()
window.show()
sys.exit(app.exec())
四、容纳多文档的窗口QMdiArea
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class myWin(QMainWindow):
a=0
def __init__(self):
super(myWin, self).__init__()
self.setWindowTitle('停靠窗口控件')
self.mdi=QMdiArea()
self.setCentralWidget(self.mdi)
bar = self.menuBar()
file=bar.addMenu('文件')
# file=bar.addAction('文件')
f1=file.addAction('新建')
f2 = file.addAction('打开')
f3 = file.addAction('保存')
file.triggered.connect(self.k)
def k(self,p):
print(p.text())
if p.text()=='新建':
myWin.a=myWin.a+1
print(myWin.a)
sub=QMdiSubWindow()
sub.setWidget(QTextEdit())
sub.setWindowTitle('子窗口'+str(myWin.a))
self.mdi.addSubWindow(sub)
sub.show()
elif p.text()=='打开':
self.mdi.cascadeSubWindows()
elif p.text()=='保存':
self.mdi.tileSubWindows()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = myWin()
window.show()
sys.exit(app.exec())
四、容纳多文档的窗口
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class myWin(QMainWindow):
a=0
def __init__(self):
super(myWin, self).__init__()
self.setWindowTitle('容纳多文档的窗口')
self.mdi=QMdiArea()
self.setCentralWidget(self.mdi)
bar = self.menuBar()
file=bar.addMenu('文件')
# file=bar.addAction('文件')
f1=file.addAction('新建')
f2 = file.addAction('打开')
f3 = file.addAction('保存')
file.triggered.connect(self.k)
def k(self,p):
print(p.text())
if p.text()=='新建':
myWin.a=myWin.a+1
print(myWin.a)
sub=QMdiSubWindow()
sub.setWidget(QTextEdit())
sub.setWindowTitle('子窗口'+str(myWin.a))
self.mdi.addSubWindow(sub)
sub.show()
elif p.text()=='打开':
self.mdi.cascadeSubWindows()
elif p.text()=='保存':
self.mdi.tileSubWindows()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = myWin()
window.show()
sys.exit(app.exec())