PyQT5实现选项卡窗口、堆栈窗口、停靠窗口、子窗口

 更新时间:2021年04月07日 10:39:46   作者:风间悠香  
这篇文章主要介绍了PyQT5实现选项卡窗口、堆栈窗口、停靠窗口、子窗口,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、选项卡控件QTabWidget

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的内容
  self.tab1UI()
  self.tab2UI()
  self.tab3UI()

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

 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("./images/timg.gif")
  label.setMovie(movie)
  movie.start()

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

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

实现效果:

二、堆栈窗口QStackedWidget

import sys

# 使用调色板等
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


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("./images/timg.gif")
  label.setMovie(movie)
  movie.start()

 def stack3UI(self):
  label = QLabel("", self.stack3)
  label.setPixmap(QPixmap("./images/ailusha.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.show()
 # 主循环
 sys.exit(app.exec_())

实现效果:

三、停靠控件QDockWidget

import sys

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


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.show()
 # 主循环
 sys.exit(app.exec_())

实现效果:

四、容纳多文档窗口(多子窗口)

import sys

# 使用调色板等
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
# 导入QT,其中包含一些常量,例如颜色等
# 导入常用组件
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit
from PyQt5.QtWidgets import QMdiArea, QMdiSubWindow


class DemoWin(QMainWindow):
 count = 0

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

 def initUI(self):
  # 将窗口设置为动图大小
  self.setFixedSize(800, 500)
  self.mdi = QMdiArea()
  bar = self.menuBar()
  file = bar.addMenu("SubWin")
  file.addAction("New")
  file.addAction("Cascade")
  file.addAction("Tiled")

  file.triggered.connect(self.windowAction)

  self.setCentralWidget(self.mdi)

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

 def windowAction(self, q):
  # 当点击菜单栏中的New时,新建一个子窗口
  if q.text() == "New":
   # 为子窗口计数
   DemoWin.count = DemoWin.count + 1
   # 创建一个子窗口
   sub = QMdiSubWindow()
   # 为子窗口添加一个TextEdit控件
   sub.setWidget(QTextEdit())
   self.mdi.addSubWindow(sub)
   sub.show()
  elif q.text() == "Cascade": # 当点击菜单栏中的Cascade时,堆叠子窗口
   self.mdi.cascadeSubWindows()
  elif q.text() == "Tiled": # 当点击菜单栏中的Tiled时,平铺子窗口
   self.mdi.tileSubWindows()


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

实现效果:

到此这篇关于PyQT5实现选项卡窗口、堆栈窗口、停靠窗口、子窗口的文章就介绍到这了,更多相关PyQT5 窗口 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • Python动态可视化模块Pynimate初体验

    Python动态可视化模块Pynimate初体验

    Pynimate是python第三方用于动态可视化的数据模块,是一位专攻 Python 语言的程序员开发的安装包。本文将通过几个简单的示例,讲解一下Pynimate的使用方法,需要的可以参考一下
    2023-02-02
  • python 音频处理重采样、音高提取的操作方法

    python 音频处理重采样、音高提取的操作方法

    这篇文章主要介绍了python 音频处理重采样、音高提取,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • python类属性学习深入讲解

    python类属性学习深入讲解

    这篇文章主要介绍了python类属性学习深入讲解,文中对于python的类属性的理解有正在学习python的同学可以一块学习下
    2021-03-03
  • Django中使用ModelForm生成HTML标签的方法步骤

    Django中使用ModelForm生成HTML标签的方法步骤

    在 Django 中,使用 ModelForm 来生成 HTML 表单标签是一种常见且高效的做法,本文主要介绍了Django中使用ModelForm生成HTML标签的方法步骤,感兴趣的可以了解一下
    2024-01-01
  • Python爬虫之获取心知天气API实时天气数据并弹窗提醒

    Python爬虫之获取心知天气API实时天气数据并弹窗提醒

    今天我们来学习如何获取心知天气API实时天气数据,制作弹窗提醒,并设置成自启动项目.文中有非常详细的代码示例及介绍,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • Idea安装python显示无SDK问题解决方案

    Idea安装python显示无SDK问题解决方案

    这篇文章主要介绍了Idea安装python显示无SDK问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • python3.7 sys模块的具体使用

    python3.7 sys模块的具体使用

    这篇文章主要介绍了python3.7 sys模块的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python实战基础之Pandas统计某个数据列的空值个数

    Python实战基础之Pandas统计某个数据列的空值个数

    我们在处理数据的时候,经常需要检查数据的质量,也需要知道出问题的数据在哪个位置,下面这篇文章主要给大家介绍了关于Python实战基础之利用Pandas统计某个数据列空值个数的相关资料,需要的朋友可以参考下
    2022-08-08
  • Python抖音无水印视频下载方法

    Python抖音无水印视频下载方法

    这篇文章主要介绍了用Python下载抖音无水印视频的方法,本文通过图文实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • Python多继承顺序实例分析

    Python多继承顺序实例分析

    这篇文章主要介绍了Python多继承顺序,结合实例形式分析了Python多继承情况下继承顺序对同名函数覆盖的影响,需要的朋友可以参考下
    2018-05-05

最新评论