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实现逻辑回归的方法示例
May 02 Python
Python3.x对JSON的一些操作示例
Sep 01 Python
Python解决N阶台阶走法问题的方法分析
Dec 28 Python
Django项目中用JS实现加载子页面并传值的方法
May 28 Python
Python操作mongodb的9个步骤
Jun 04 Python
实例讲解Python3中abs()函数
Feb 19 Python
python模拟鼠标点击和键盘输入的操作
Aug 04 Python
Python实现剪刀石头布小游戏(与电脑对战)
Dec 31 Python
python asyncio 协程库的使用
Jan 21 Python
Python实现微信表情包炸群功能
Jan 28 Python
OpenCV-Python实现图像平滑处理操作
Jun 08 Python
Python编写nmap扫描工具
Jul 21 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
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
php类自动加载器实现方法
2015/07/28 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
extjs grid设置某列背景颜色和字体颜色的实现方法
2010/09/06 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
node.js中的fs.truncate方法使用说明
2014/12/15 Javascript
jQuery插件ajaxFileUpload实现异步上传文件效果
2015/04/14 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
浅谈Web页面向后台提交数据的方式和选择
2016/09/23 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
ES6入门教程之let、const的使用方法
2019/04/13 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
python中while循环语句用法简单实例
2015/05/07 Python
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
Python heapq使用详解及实例代码
2017/01/25 Python
Django实现自定义404,500页面教程
2017/03/26 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
如何对python的字典进行排序
2020/06/19 Python
python3中for循环踩过的坑记录
2020/12/14 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
岗位职责范本
2013/11/23 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
竞选体育委员演讲稿
2014/04/26 职场文书
火灾现场处置方案
2014/05/28 职场文书
2014中考励志标语
2014/06/05 职场文书
个人委托书范本
2014/09/13 职场文书
创先争优演讲稿
2014/09/15 职场文书
大学副班长竞选稿
2015/11/21 职场文书
《植树问题》教学反思
2016/03/03 职场文书