Pyqt5学习笔记八、PYQT5选项卡窗口、堆栈窗口、停靠窗口

磊落不羁 by:磊落不羁 分类:pyQt5 时间:1年前 阅读:147 评论:0

八、选项卡窗口、堆栈窗口、停靠窗口、子窗口

1、QTabWidget

QTabWidget控件提供了一个选项卡和一个页面区域,默认显示第一个选项卡的页面。通过单击各选项卡可以查看对应的页面。如果在一个窗口中显示的输入字段很多,则可以对这些字段进行拆分,分别放置在不同页面的选项卡中。

image-20221224132258686

image-20221224132315700

一个示列

import sys
# 使用调色板等
from PyQt5.QtGui import QIcon
# 导入QT,其中包含一些常量,例如颜色等
# 导入常用组件
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QTabWidget
from PyQt5.QtWidgets import QFormLayout, QLineEdit,QLabel
from PyQt5.QtGui import QMovie,QPixmap

class DemoWin(QMainWindow):
    def __init__(self):
        super(DemoWin, self).__init__()
        self.initUI()
    def initUI(self):
        # 将窗口设置为动图大小
        self.setFixedSize(500, 300)
        #设置三个选项卡控件
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.tab3 = QWidget()
        #设置选项卡标签,并将选项卡控件绑定到标签里
        self.tabwidget = QTabWidget(self)
        self.tabwidget.resize(500, 300)
        self.tabwidget.addTab(self.tab1, "选项卡1")
        self.tabwidget.addTab(self.tab2, "选项卡2")
        self.tabwidget.addTab(self.tab3, "选项卡3")

         # 分别加载三个Tab的界面函数,和选项卡绑定是在函数中使用setLayout 
         #用函数是为了好区分选项卡内容,也可以不用函数直接写三个不同的布局,但是阅读的时候会困难
        self.tab1UI()
        self.tab2UI()
        self.tab3UI()
      # 添加窗口标题
        self.setWindowTitle("TabWidget控件演示")

    def tab1UI(self):
        layout = QFormLayout()
        layout.addRow('姓名', QLineEdit())
        layout.addRow('年龄', QLineEdit())
        layout.addRow('住址', QLineEdit())
        self.tab1.setLayout(layout)

    def tab2UI(self):
        label = QLabel("",self.tab2)
        movie = QMovie("./image/002.gif")
        label.setMovie(movie)
        movie.start()

    def tab3UI(self):
        label = QLabel("",self.tab3)
        label.setPixmap(QPixmap("./image/001.png"))

if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon("images/icon.ico"))
    # 创建一个主窗口
    mainWin = DemoWin()
    # 显示
    mainWin.show()
    # 主循环
    sys.exit(app.exec_())

qtabWidget

2、QStackedWidget

QStackedWidget 是一个堆栈窗口控件,可以填充一些小控件,但同一时间只有一个小控件可以显示。QStackedWidget使用QStackedLayout布局。QStackedWidget控件与QTabWidget类似,可以有效地显示窗口中的控件。

import sys
# 使用调色板等
import QCandyUi.CandyWindow
from PyQt5.QtGui import QIcon
# 导入QT,其中包含一些常量,例如颜色等
# 导入常用组件
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QTabWidget, QListWidget
from PyQt5.QtWidgets import QFormLayout, QLineEdit, QLabel, QStackedWidget, QHBoxLayout
from PyQt5.QtGui import QMovie, QPixmap
from QCandyUi.CandyWindow import colorful
# @colorful('blueGreen') #QcandyUI的使用方式一

class DemoWin(QWidget):
    def __init__(self):
        super(DemoWin, self).__init__()
        self.initUI()

    def initUI(self):
        # 将窗口设置为动图大小
        self.setFixedSize(600, 300)
        self.list = QListWidget()
        self.list.setMaximumWidth(100)
        # 设置列表内容(stack的索引)
        self.list.insertItem(0, '个人信息')
        self.list.insertItem(1, '动画')
        self.list.insertItem(2, '图片')
        # 创建三个stack页面
        self.stack1 = QWidget()
        self.stack2 = QWidget()
        self.stack3 = QWidget()
        # 分别加载三个Stack的内容
        self.stack1UI()
        self.stack2UI()
        self.stack3UI()
        # 将三个stack页面加入stackWidget
        self.stackWidget = QStackedWidget()
        self.stackWidget.addWidget(self.stack1)
        self.stackWidget.addWidget(self.stack2)
        self.stackWidget.addWidget(self.stack3)

        hbox = QHBoxLayout()
        hbox.addWidget(self.list)
        hbox.addWidget(self.stackWidget)
        self.setLayout(hbox)

        # 为List绑定事件,当条目改变时,切换stack(重要)
        self.list.currentRowChanged.connect(self.stackSwitch)

        # 添加窗口标题
        self.setWindowTitle("StackWidgetDemo")

    def stack1UI(self):
        layout = QFormLayout()
        layout.addRow('姓名', QLineEdit())
        layout.addRow('年龄', QLineEdit())
        layout.addRow('住址', QLineEdit())
        self.stack1.setLayout(layout)

    def stack2UI(self):
        label = QLabel("", self.stack2)
        movie = QMovie("./image/002.gif")
        label.setMovie(movie)
        movie.start()

    def stack3UI(self):
        label = QLabel("", self.stack3)
        label.setPixmap(QPixmap("./image/001.png"))

     # 切换list时触发槽函数切换Stack
    def stackSwitch(self, index):
        # 设置当前的堆栈界面显示为第几个界面
        self.stackWidget.setCurrentIndex(index)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon("images/icon.ico"))
     # 创建一个主窗口
    mainWin = DemoWin()
    mainWin=QCandyUi.CandyWindow.createWindow(mainWin,"pink")  #QcandyUI的使用方式二
     # 显示
    mainWin.show()
     # 主循环
    sys.exit(app.exec_())

QstackedWidget

堆栈窗口的使用基本思路

1、设置列表窗口并设置好索引

2、设置要显示的窗口组件

3、将要显示的窗口组件加载进堆栈窗口

4、布局列表和堆栈窗口

5、为List绑定事件,当条目改变时,切换stack(重要)

    self.list.currentRowChanged.connect(self.stackSwitch)

3、QDockWidget

QDockWidget 是一个可以停靠在 QMainWindow 内的窗口控件,它可以保持在浮动状态或者在指定位置作为子窗口附加到主窗口中。QMainWindow类的主窗口对象保留有一个用于停靠窗口的区域,这个区域在控件的中央周围,如图所示。

image-20221224150626740

image-20221224150651091

import sys

# 使用调色板等
import QCandyUi.CandyWindow
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
# 导入QT,其中包含一些常量,例如颜色等
# 导入常用组件
from PyQt5.QtWidgets import QApplication, QMainWindow, QListWidget
from PyQt5.QtWidgets import QLineEdit, QDockWidget
from QCandyUi.CandyWindow import colorful



class DemoWin(QMainWindow):
    def __init__(self):
        super(DemoWin, self).__init__()
        self.initUI()

    def initUI(self):
        # 将窗口设置为动图大小
        self.setFixedSize(600, 400)
        # 创建一个DockWidget
        self.items = QDockWidget()

        # 定义一些内容(放到DockWidget中)
        self.listWidget = QListWidget()
        self.listWidget.setFixedSize(150, 300)
        self.listWidget.addItem('item1')
        self.listWidget.addItem('item2')
        self.listWidget.addItem('item3')
        self.items.setWidget(self.listWidget)
        # 将DockWidget加到主窗口中,默认停靠在右边
        self.addDockWidget(Qt.RightDockWidgetArea, self.items)
        # 给主窗口添加一些控件
        self.setCentralWidget(QLineEdit())

        # 添加窗口标题
        self.setWindowTitle("DockWidgetDemo")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon("images/icon.ico"))
    # 创建一个主窗口
    mainWin = DemoWin()
    mainWin=QCandyUi.CandyWindow.createWindow(mainWin,'blue')
    # 显示
    mainWin.show()
    # 主循环
    sys.exit(app.exec_())

QDockWidget

4、MDI窗口

见1.6 布局中的第六小结

非特殊说明,本文版权归原作者所有,转载请注明出处

本文地址:http://php.liulei.com.cn/?type=acticle&id=73

评论列表

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址

TOP