PyQt5笔记之弹出窗口大全


Posted in Python onJune 20, 2019

本文实现了PyQt5个各种弹出窗口:输入框、消息框、文件对话框、颜色对话框、字体对话框、自定义对话框

其中,为了实现自定义对话框的返回值,使用了信号/槽

本文基于 windows 7 + python 3.4

效果图:

PyQt5笔记之弹出窗口大全

PyQt5笔记之弹出窗口大全

取得弹出窗口的返回值

PyQt5笔记之弹出窗口大全

全部代码:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt, pyqtSignal, QTimer


    
class MyWindow(QWidget): 

  def __init__(self):

    super().__init__()
    
    self.setWindowTitle('PyQt5 弹出窗口(框)大全')
    self.resize(400, 300)
    
    # 全局布局(注意参数 self)
    wl = QVBoxLayout(self)

    # 局部布局
    h1 = QHBoxLayout() # 输入框
    h2 = QHBoxLayout() # 消息窗口
    h3 = QHBoxLayout() # 文件(夹)打开,保存
    h4 = QHBoxLayout() # 颜色、字体、自定义

    
    btn11 = QPushButton('输入:整数')
    btn12 = QPushButton('输入:小数')
    btn13 = QPushButton('输入:文本')
    btn14 = QPushButton('输入:多文')
    btn15 = QPushButton('输入:选项')
    
    btn21 = QPushButton('消息:信息')
    btn22 = QPushButton('消息:问答')
    btn23 = QPushButton('消息:警告')
    btn24 = QPushButton('消息:危险')
    btn25 = QPushButton('消息:关于')
    
    btn31 = QPushButton('文件:文件夹')
    btn32 = QPushButton('文件:单文件')
    btn33 = QPushButton('文件:多文件')
    btn34 = QPushButton('文件:保存')
    btn35 = QPushButton('文件:另存为')

    btn41 = QPushButton('颜色')
    btn42 = QPushButton('字体')
    btn43 = QPushButton('自定义')
    
    for btn in (btn11, btn12, btn13, btn14, btn15):
      h1.addWidget(btn)
      
    for btn in (btn21, btn22, btn23, btn24, btn25):
      h2.addWidget(btn)
      
    for btn in (btn31, btn32, btn33, btn34, btn35):
      h3.addWidget(btn)
      
    for btn in (btn41, btn42, btn43):
      h4.addWidget(btn)
      
    btn11.clicked.connect(self.do_btn11) # 输入:整数
    btn12.clicked.connect(self.do_btn12) # 输入:小数
    btn13.clicked.connect(self.do_btn13) # 输入:文本
    btn14.clicked.connect(self.do_btn14) # 输入:多文
    btn15.clicked.connect(self.do_btn15) # 输入:选项
    
    btn21.clicked.connect(self.do_btn21) # 消息:信息
    btn22.clicked.connect(self.do_btn22) # 消息:问答
    btn23.clicked.connect(self.do_btn23) # 消息:警告
    btn24.clicked.connect(self.do_btn24) # 消息:危险
    btn25.clicked.connect(self.do_btn25) # 消息:关于
    
    btn31.clicked.connect(self.do_btn31) # 文件:文件夹
    btn32.clicked.connect(self.do_btn32) # 文件:单文件
    btn33.clicked.connect(self.do_btn33) # 文件:多文件
    btn34.clicked.connect(self.do_btn34) # 文件:保存
    btn35.clicked.connect(self.do_btn35) # 文件:另存为

    btn41.clicked.connect(self.do_btn41) # 颜色
    btn42.clicked.connect(self.do_btn42) # 字体
    btn43.clicked.connect(self.do_btn43) # 自定义

    # 加到全局布局
    wl.addLayout(h1) 
    wl.addLayout(h2)
    wl.addLayout(h3)
    wl.addLayout(h4)
    
    self.window2 = MyWindow2()             # 自定义窗口
    self.window2.before_close_signal.connect(self.echo) # 接收自定义窗口关闭时发送过来的信号,交给 echo 函数显示
    

  def echo(self, value):
    '''显示对话框返回值'''
    QMessageBox.information(self, "返回值",  "得到:{}\n\ntype: {}".format(value, type(value)), QMessageBox.Yes | QMessageBox.No)
    #pass
    
  # =====================================================================
  def do_btn11(self, event): # 输入:整数
    #后面四个数字的作用依次是 初始值 最小值 最大值 步幅 
    value, ok = QInputDialog.getInt(self, "输入框标题", "这是提示信息\n\n请输入整数:", 37, -10000, 10000, 2)
    #self.echo(value)
    
  def do_btn12(self, event): # 输入:小数
    #后面四个数字的作用依次是 初始值 最小值 最大值 小数点后位数 
    value, ok = QInputDialog.getDouble(self, "输入框标题", "这是提示信息\n\n请输入整数:", 37.56, -10000, 10000, 2)
    self.echo(value)
    
  def do_btn13(self, event): # 输入:文本
    #第三个参数表示显示类型,可选,有正常(QLineEdit.Normal)、密?( QLineEdit. Password)、不显示( QLineEdit. NoEcho)三种情况
    value, ok = QInputDialog.getText(self, "输入框标题", "这是提示信息\n\n请输入文本:", QLineEdit.Normal, "这是默认值")
    self.echo(value)
    
  def do_btn14(self, event): # 输入:多文
    value, ok = QInputDialog.getMultiLineText(self, "输入框标题", "这是提示信息\n\n请输入地址:", "默认的\n我的地址是\n中国广东广州番禺") 
    self.echo(value)
    
  def do_btn15(self, event): # 输入:选项
    #1为默认选中选项目,True/False 列表框是否可编辑。 
    items = ["Spring", "Summer", "Fall", "Winter"] 
    value, ok = QInputDialog.getItem(self, "输入框标题", "这是提示信息\n\n请选择季节:", items, 1, True) 
    self.echo(value)
    
  # =====================================================================
  def do_btn21(self, event): # 消息:信息
    reply = QMessageBox.information(self,
                  "消息框标题", 
                  "这是一条消息。", 
                  QMessageBox.Yes | QMessageBox.No)
    self.echo(reply)
    
  def do_btn22(self, event): # 消息:问答
    reply = QMessageBox.question(self,
                  "消息框标题", 
                  "这是一条问答吗?", 
                  QMessageBox.Yes | QMessageBox.No)
    self.echo(reply)
    
  def do_btn23(self, event): # 消息:警告
    reply = QMessageBox.warning(self,
                  "消息框标题", 
                  "这是一条警告!", 
                  QMessageBox.Yes | QMessageBox.No)
    self.echo(reply)
    
  def do_btn24(self, event): # 消息:危险
    reply = QMessageBox.ctitical(self,
                  "消息框标题", 
                  "危险!程序即将强制退出!!!\n\n这个按钮再也点不开。", 
                  QMessageBox.Yes | QMessageBox.No)
    self.echo(reply)
    
  def do_btn25(self, event): # 消息:关于
    reply = QMessageBox.about(self,
                  "消息框标题", 
                  "这是关于软件的说明。。。", 
                  QMessageBox.Yes | QMessageBox.No)
    self.echo(reply)
    
  # =====================================================================
  def do_btn31(self, event): # 文件:文件夹
    dir = QFileDialog.getExistingDirectory(self, 
                  "选取文件夹", 
                  "C:/")         # 起始路径
    self.echo(dir)
    
  def do_btn32(self, event): # 文件:单文件
    file_, filetype = QFileDialog.getOpenFileName(self, 
                  "选取文件", 
                  "C:/", 
                  "All Files (*);;Text Files (*.txt)")  #设置文件扩展名过滤,注意用双分号间隔
    self.echo(file_)
    
  def do_btn33(self, event): # 文件:多文件
    files, ok = QFileDialog.getOpenFileNames(self, 
                  "多文件选择", 
                  "C:/", 
                  "All Files (*);;Text Files (*.txt)") 
    self.echo(files)
    
  def do_btn34(self, event): # 文件:保存
    file_, ok = QFileDialog.getSaveFileName(self, 
                  "文件保存", 
                  "C:/", 
                  "All Files (*);;Text Files (*.txt)")
    self.echo(file_)
    
  def do_btn35(self, event): # 文件:另存为
    file_, ok = QFileDialog.getSaveFileName(self, 
                  "文件另存为", 
                  "C:/", 
                  "All Files (*);;Text Files (*.txt)")
    self.echo(file_)

  # =====================================================================
  def do_btn41(self, event): # 颜色
    color = QColorDialog.getColor(Qt.blue, self, "Select Color")
    self.echo(color)
    
  def do_btn42(self, event): # 字体
    font, ok = QFontDialog.getFont()
    self.echo(font)
    
  def do_btn43(self, event): # 自定义
    
    self.window2.show()
  

class MyWindow2(QWidget):
  '''自定义窗口'''
  # 知识点:
  # 1.为了得到返回值用到了自定义的信号/槽
  # 2.为了显示动态数字,使用了计时器
  
  before_close_signal = pyqtSignal(int)    # 自定义信号(int类型)
  
  def __init__(self):
    super().__init__()
    
    self.sec = 0
    self.setWindowTitle('自定义窗口')
    self.resize(200,150)

    self.lcd = QLCDNumber(18, self)
    btn1 = QPushButton(self, text="测试")
    btn2 = QPushButton(self, text="关闭")

    layout = QVBoxLayout(self)
    layout.addWidget(self.lcd)
    layout.addWidget(btn1)
    layout.addWidget(btn2)
    
    self.timer = QTimer() 

    self.timer.timeout.connect(self.update) # 每次计时结束,触发update
    btn1.clicked.connect(self.startTimer) 
    btn2.clicked.connect(self.stopTimer)  # 去到关闭前的处理
  
  def update(self):  
    self.sec += 1 
    self.lcd.display(self.sec)       # LED显示数字+1 
   
  def startTimer(self): 
    self.timer.start(1000)         # 计时器每秒计数 

  def stopTimer(self):
    self.timer.stop()  
    self.sec = 0 
    self.before_close_signal.emit(self.lcd.value()) # 发送信号,带参数 888
    self.close()              # 然后窗口关闭

  # 默认关闭事件 
  def closeEvent(self, e):
    self.stopTimer()

if __name__=="__main__":
  import sys
  
  app = QApplication(sys.argv)
  win = MyWindow()
  win.show()
  sys.exit(app.exec_())

以上这篇PyQt5笔记之弹出窗口大全就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python登录pop3邮件服务器接收邮件的方法
Apr 30 Python
python微信跳一跳系列之棋子定位颜色识别
Feb 26 Python
Python设计模式之职责链模式原理与用法实例分析
Jan 11 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
Python面向对象总结及类与正则表达式详解
Apr 18 Python
python中列表的切片与修改知识点总结
Jul 23 Python
Django如何实现上传图片功能
Aug 16 Python
python yield关键词案例测试
Oct 15 Python
在python3中实现查找数组中最接近与某值的元素操作
Feb 29 Python
Python基于pyjnius库实现访问java类
Jul 31 Python
Pandas数据类型之category的用法
Jun 28 Python
深入浅析Django MTV模式
Sep 04 Python
PyQt5创建一个新窗口的实例
Jun 20 #Python
pyQT5 实现窗体之间传值的示例
Jun 20 #Python
python3.6环境安装+pip环境配置教程图文详解
Jun 20 #Python
Python 3.6 -win64环境安装PIL模块的教程
Jun 20 #Python
详解Python 调用C# dll库最简方法
Jun 20 #Python
python async with和async for的使用
Jun 20 #Python
python aiohttp的使用详解
Jun 20 #Python
You might like
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
处理单名多值表单的详解
2013/06/08 PHP
codeigniter中view通过循环显示数组数据的方法
2015/03/20 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
javascript背景时钟实现方法
2015/06/18 Javascript
js跨域请求数据的3种常用的方法
2015/12/01 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
Node.js如何自动审核团队的代码
2016/07/20 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
《Python学习手册》学习总结
2018/01/17 Python
Numpy之文件存取的示例代码
2018/08/03 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
2018/12/05 Python
Python之时间和日期使用小结
2019/02/14 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
pandas.cut具体使用总结
2019/06/24 Python
pygame实现打字游戏
2021/02/19 Python
Python如何将模块打包并发布
2020/08/30 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
日本快乐生活方式购物网站:Shop Japan
2018/07/17 全球购物
.NET笔试题(20个问题)
2016/02/02 面试题
医大实习自我鉴定
2013/12/07 职场文书
幼儿园消防演练方案
2014/02/13 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
小学生寒假家长评语
2014/04/16 职场文书
centos8安装MongoDB的详细过程
2021/10/24 MongoDB
JAVA 线程池(池化技术)的实现原理
2022/04/28 Java/Android