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 del()函数用法
Mar 24 Python
python数据结构之二叉树的统计与转换实例
Apr 29 Python
用python删除java文件头上版权信息的方法
Jul 31 Python
在Python中使用HTML模版的教程
Apr 29 Python
在Python中操作列表之List.pop()方法的使用
May 21 Python
通过Python使用saltstack生成服务器资产清单
Mar 01 Python
Python 基础之字符串string详解及实例
Apr 01 Python
Python日期时间对象转换为字符串的实例
Jun 22 Python
Python中的支持向量机SVM的使用(附实例代码)
Jun 26 Python
python实现宿舍管理系统
Nov 22 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 05 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
php 文本文件的读取效率
2012/02/10 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
JavaScript返回当前会话cookie全部键值对照的方法
2015/04/03 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
Javascript基础回顾之(二) js作用域
2017/01/31 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
vue实现消息的无缝滚动效果的示例代码
2017/12/05 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
微信小程序实现自动定位功能
2018/10/31 Javascript
puppeteer库入门初探
2019/01/09 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
Python随机数random模块使用指南
2016/09/09 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
Python发送邮件测试报告操作实例详解
2018/12/08 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
python调用私有属性的方法总结
2020/07/24 Python
电脑教师的教学自我评价
2013/11/26 职场文书
编辑求职信样本
2013/12/16 职场文书
药品促销活动方案
2014/02/14 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
计算机系本科生求职信
2014/05/31 职场文书
学生会竞选演讲稿怎么写
2014/08/26 职场文书
2014最新毕业证代领委托书
2014/09/26 职场文书
教学反思怎么写
2016/02/24 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书
深入理解pytorch库的dockerfile
2022/06/10 Python