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 窗口 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法

    1.先使用Qt designer设计两个窗口,一个是主窗口,一个是子窗口   其中主窗口是新建-Main Window,子窗口是Dialog窗体. 两个窗口不能是同一类型,否则会崩溃. 并保存为EyeTracking_main.ui和EyeTracking_process.ui(因为我在做眼动追踪,因此窗体命名与此相关,后同),使用UIC工具转成.py文件. 2.写一个驱动函数调用两个窗体 主窗体Eyetracking_main.py from PyQt5 import QtCore, QtGu

  • PYQT5开启多个线程和窗口,多线程与多窗口的交互实例

    每点击一次按钮,弹出一个对话框(子窗口),同时开启一个子线程来执行任务并更新对话框内容,关闭对话框则关闭对应子线程 1. 建立一个简单的主界面和一个自定义对话框 from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(327,

  • pyqt5 实现多窗口跳转的方法

    今天在做pyqt5的多页面跳转时遇到问题,一点击button按钮,程序会崩溃.在网上查了下,应该是当窗口A调用窗口B的时候,两个窗口不能是同一类型.我写的时候把A.B同时写成了QWidget.把窗口B改成Dialog类型后,就可以成功调用了. 具体代码不放了,写个大概的模板如下: class A(QWidget): def __init__(self): ...省略... self.btn = QPushButton('跳转按钮') def initUI(self): pass class B(

  • PyQt5 多窗口连接实例

    前言 之前做过pyqt的一个简单界面,在一个窗口(MainWindow)中实现一些操作:之前嫌麻烦没有去做多窗口和它们的切换功能.最近研究了下窗口的调用和切换. pyqt4和5有很多不同,在参考别人案例的时候走了很多弯路,最后在pyqt5下实现了简洁的多窗口切换为大家参考. 思路 多窗口的切换和显示连接到按钮的信号上再进行show()就行,格式上有别于pyqt4. 一个逻辑比较清晰的解决方案是,使用一个主程序,在其中实例化各个窗口,然后定义它们的显示逻辑即是按钮的槽函数. 格式上稍有不对就会报错

  • PyQt5实现从主窗口打开子窗口的方法

    1.在Qt Designer中设计两个简单窗口 2.将.ui文件转换成.py文件 3.新建**.py文件 #-*- coding:utf-8 -*- from PyQt5.QtWidgets import QMainWindow, QApplication from window import Ui_MainWindow from child import Ui_Child import sys class Main(QMainWindow,Ui_MainWindow): def __init_

  • python3+PyQt5+Qt Designer实现堆叠窗口部件

    本文是对<Python Qt GUI快速编程>的第9章的堆叠窗口例子Vehicle Rental用Python3+PyQt5+Qt Designer进行改写. 第一部分无借用Qt Designer,完全用代码实现. 第二部分则借用Qt Designer,快速实现. 第一部分: import sys from PyQt5.QtCore import (Qt) from PyQt5.QtWidgets import (QApplication, QComboBox, QDialog, QDialo

  • 对PyQt5基本窗口控件 QMainWindow的使用详解

    QMainWindow基本介绍 QMainWindow主窗口为用户提供了一个应用程序框架,它有自己的布局,可以在布局中添加控件. 窗口类型介绍 PyQt5中,主要使用以下三个类来创建窗口,可以直接使用,也可以继承后再使用 QMainWindow QWidget QDialog QMainWindow QMainWindow可以包含菜单栏,工具栏,状态栏,标题栏等,是GUI程序的主窗口. 如果我们需要创建主窗口程序,就使用该类. QDialog QDialog是对话框窗口的基类,对话框一般用来执行

  • PyQt5笔记之弹出窗口大全

    本文实现了PyQt5个各种弹出窗口:输入框.消息框.文件对话框.颜色对话框.字体对话框.自定义对话框 其中,为了实现自定义对话框的返回值,使用了信号/槽 本文基于 windows 7 + python 3.4 效果图: 取得弹出窗口的返回值 全部代码: from PyQt5.QtWidgets import * from PyQt5.QtCore import Qt, pyqtSignal, QTimer class MyWindow(QWidget): def __init__(self):

  • PyQt5每天必学之关闭窗口

    最简单的关闭一个窗口的方法是点击标题栏上的 x 标志.但是,在下面的例子中,我们将展示如何通过编程来控制关闭窗口.我们将使用PyQt5的信号/槽. 以下是我们在例子中使用到的 QPushButton 控件的构造方法. QPushButton(string text, QWidget parent = None) text 参数是在按钮上显示的文本.parent 要将按钮控件放在哪里.在下面的例子中我们要将按钮控件放到 QWidget里.一个应用程序的窗口控件可以形成一个分层结构,在这个层次,大多

  • PyQt5固定窗口大小的方法

    直接以数值固定大小 根据屏幕大小固定大小 禁止最大化按钮 MainWindow.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint) 以上这篇PyQt5固定窗口大小的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

随机推荐