參考博文:https://blog.csdn.net/jia666666/article/details/81669092
QTabWidget控件提供一個選項卡和一個頁面區域,默認顯示第一個選項卡的頁面
通過點擊各選項卡可以查看相應的界面,如果在一個窗口中顯示輸入字很多,則可
以對這些字段進行拆分,分別放置在不同界面的選項卡中
流程:1,創建一個QtabWidget
2.為選項卡對話框中的每個頁面創建一個QWidget,但不要為它們制定父窗口小部件
3,將子窗口的小部件插入到頁面窗口小部件中,使用布局為其定位
4,調用addTab()或insertTab()將頁面小部件放入選項卡小部件,為每個選項
卡提供一個帶有可選鍵盤快捷鍵的合適標簽
import sys
from PyQt5.QtWidgets import QWidget,QApplication,QGridLayout,QRadioButton,QVBoxLayout,QTabWidget,QFormLayout,QLabel,QLineEdit
class Tab(QTabWidget):
def __init__(self):
super().__init__()
self.tab1=QWidget()
self.tab2=QWidget()
self.tab3=QWidget()
self.addTab(self.tab1,'tab1')
self.addTab(self.tab2,'tab2')
self.addTab(self.tab3,'tab3')
self.tab1UI()
self.tab2UI()
def tab1UI(self):
tab1_lay=QGridLayout()
self.tab1.setLayout(tab1_lay)
self.setTabText(0,'信息頁')
label=QLabel('姓名:tom')
tab1_lay.addWidget(label,0,0)
def tab2UI(self):
tab2_lay=QGridLayout()
self.tab2.setLayout(tab2_lay)
self.setTabText(1,'第二頁')
label=QLabel('姓名:tom')
tab2_lay.addWidget(label,0,0)
class TabWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('demo')
self.setGeometry(300,300,300,200)
#表單布局
layout=QFormLayout()
self.setLayout(layout)
layout.addRow(QRadioButton('男'))
layout.addRow(QRadioButton('女'))
tabwidget=Tab()
layout.addRow(tabwidget)
if __name__=='__main__':
app=QApplication(sys.argv)
demo=TabWidget()
demo.show()
sys.exit(app.exec_())
QStackedWidget:參考:https://blog.csdn.net/jia666666/article/details/81669425
QstackedWidget是一個堆棧窗口控件,可以填充一些小控件,但是同一時間只有一個小控件可以顯示,QstackedWidget使用QstackedLayout布局,QstackedWidget和QTabWidget類似,可以有效的顯示窗口的控件
import sys
from PyQt5.QtWidgets import QWidget,QStackedWidget,QListWidget,QApplication,QGridLayout,QRadioButton,QVBoxLayout,QTabWidget,QFormLayout,QLabel,QLineEdit
class Stacked(QStackedWidget):
def __init__(self):
super().__init__()
self.area1=QWidget()
self.area2=QWidget()
self.area3=QWidget()
self.addWidget(self.area1)
self.addWidget(self.area2)
self.addWidget(self.area3)
self.area1UI()
self.area2UI()
def area1UI(self):
layout=QFormLayout()
self.area1.setLayout(layout)
layout.addRow('name',QLineEdit())
def area2UI(self):
layout=QFormLayout()
self.area2.setLayout(layout)
layout.addRow('password',QLineEdit())
class StackedWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('demo')
self.setGeometry(300,300,300,200)
#表單布局
layout=QFormLayout()
self.setLayout(layout)
self.widget=Stacked()
layout.addRow(self.widget)
list=QListWidget()
list.insertItem(0,'first1')
list.insertItem(1,'second')
list.insertItem(2,'three')
layout.addRow(list)
list.currentRowChanged.connect(self.showArea)
def showArea(self,i):
self.widget.setCurrentIndex(i)
if __name__=='__main__':
app=QApplication(sys.argv)
demo=StackedWidget()
demo.show()
sys.exit(app.exec_())
QDockWidget是一個可以停靠在QMainWindow內的窗口控件,它可以保持在浮動狀態或在指定位置作為子窗口附加到主窗口中,QMainWindow類的主窗口對象保留一個用於停靠窗口的區域,這個區域在空間中央周圍
import sys
from PyQt5.QtWidgets import QWidget,QTextEdit,QMainWindow,QSystemTrayIcon,QDockWidget,QStackedWidget,QListWidget,QApplication,QGridLayout,QRadioButton,QVBoxLayout,QTabWidget,QFormLayout,QLabel,QLineEdit
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt
class DockWidget(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('demo')
self.setGeometry(300,300,300,200)
#設置系統托盤圖標,獲取托盤,設置托盤圖標
tuopan=QSystemTrayIcon(self)
tuopan.setIcon(QIcon('new.png'))
tuopan.setToolTip('1111')
tuopan.show()
dockwidget=QDockWidget('dockdemo',self)
list=QListWidget()
list.insertItem(0,'第一')
list.insertItem(1,'第二')
list.insertItem(2,'第三')
list.insertItem(3,'第四')
dockwidget.setWidget(list)
#設置QdockWidget可浮動
# dockwidget.setFloating(True)
#設置中央控件為Qtextedit
text=QTextEdit()
self.setCentralWidget(text)
#設置dockWidget放在右側
self.addDockWidget(Qt.RightDockWidgetArea,dockwidget)
if __name__=='__main__':
app=QApplication(sys.argv)
demo=DockWidget()
demo.show()
sys.exit(app.exec_())
