经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
PyQt5笔记之弹出窗口大全
来源:jb51  时间:2019/6/21 10:02:33  对本文有异议

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

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

本文基于 windows 7 + python 3.4

效果图:

取得弹出窗口的返回值

全部代码:

  1. from PyQt5.QtWidgets import *
  2. from PyQt5.QtCore import Qt, pyqtSignal, QTimer
  3.  
  4.  
  5. class MyWindow(QWidget):
  6.  
  7. def __init__(self):
  8.  
  9. super().__init__()
  10. self.setWindowTitle('PyQt5 弹出窗口(框)大全')
  11. self.resize(400, 300)
  12. # 全局布局(注意参数 self)
  13. wl = QVBoxLayout(self)
  14.  
  15. # 局部布局
  16. h1 = QHBoxLayout() # 输入框
  17. h2 = QHBoxLayout() # 消息窗口
  18. h3 = QHBoxLayout() # 文件(夹)打开,保存
  19. h4 = QHBoxLayout() # 颜色、字体、自定义
  20.  
  21. btn11 = QPushButton('输入:整数')
  22. btn12 = QPushButton('输入:小数')
  23. btn13 = QPushButton('输入:文本')
  24. btn14 = QPushButton('输入:多文')
  25. btn15 = QPushButton('输入:选项')
  26. btn21 = QPushButton('消息:信息')
  27. btn22 = QPushButton('消息:问答')
  28. btn23 = QPushButton('消息:警告')
  29. btn24 = QPushButton('消息:危险')
  30. btn25 = QPushButton('消息:关于')
  31. btn31 = QPushButton('文件:文件夹')
  32. btn32 = QPushButton('文件:单文件')
  33. btn33 = QPushButton('文件:多文件')
  34. btn34 = QPushButton('文件:保存')
  35. btn35 = QPushButton('文件:另存为')
  36.  
  37. btn41 = QPushButton('颜色')
  38. btn42 = QPushButton('字体')
  39. btn43 = QPushButton('自定义')
  40. for btn in (btn11, btn12, btn13, btn14, btn15):
  41. h1.addWidget(btn)
  42. for btn in (btn21, btn22, btn23, btn24, btn25):
  43. h2.addWidget(btn)
  44. for btn in (btn31, btn32, btn33, btn34, btn35):
  45. h3.addWidget(btn)
  46. for btn in (btn41, btn42, btn43):
  47. h4.addWidget(btn)
  48. btn11.clicked.connect(self.do_btn11) # 输入:整数
  49. btn12.clicked.connect(self.do_btn12) # 输入:小数
  50. btn13.clicked.connect(self.do_btn13) # 输入:文本
  51. btn14.clicked.connect(self.do_btn14) # 输入:多文
  52. btn15.clicked.connect(self.do_btn15) # 输入:选项
  53. btn21.clicked.connect(self.do_btn21) # 消息:信息
  54. btn22.clicked.connect(self.do_btn22) # 消息:问答
  55. btn23.clicked.connect(self.do_btn23) # 消息:警告
  56. btn24.clicked.connect(self.do_btn24) # 消息:危险
  57. btn25.clicked.connect(self.do_btn25) # 消息:关于
  58. btn31.clicked.connect(self.do_btn31) # 文件:文件夹
  59. btn32.clicked.connect(self.do_btn32) # 文件:单文件
  60. btn33.clicked.connect(self.do_btn33) # 文件:多文件
  61. btn34.clicked.connect(self.do_btn34) # 文件:保存
  62. btn35.clicked.connect(self.do_btn35) # 文件:另存为
  63.  
  64. btn41.clicked.connect(self.do_btn41) # 颜色
  65. btn42.clicked.connect(self.do_btn42) # 字体
  66. btn43.clicked.connect(self.do_btn43) # 自定义
  67.  
  68. # 加到全局布局
  69. wl.addLayout(h1)
  70. wl.addLayout(h2)
  71. wl.addLayout(h3)
  72. wl.addLayout(h4)
  73. self.window2 = MyWindow2() # 自定义窗口
  74. self.window2.before_close_signal.connect(self.echo) # 接收自定义窗口关闭时发送过来的信号,交给 echo 函数显示
  75.  
  76. def echo(self, value):
  77. '''显示对话框返回值'''
  78. QMessageBox.information(self, "返回值", "得到:{}\n\ntype: {}".format(value, type(value)), QMessageBox.Yes | QMessageBox.No)
  79. #pass
  80. # =====================================================================
  81. def do_btn11(self, event): # 输入:整数
  82. #后面四个数字的作用依次是 初始值 最小值 最大值 步幅
  83. value, ok = QInputDialog.getInt(self, "输入框标题", "这是提示信息\n\n请输入整数:", 37, -10000, 10000, 2)
  84. #self.echo(value)
  85. def do_btn12(self, event): # 输入:小数
  86. #后面四个数字的作用依次是 初始值 最小值 最大值 小数点后位数
  87. value, ok = QInputDialog.getDouble(self, "输入框标题", "这是提示信息\n\n请输入整数:", 37.56, -10000, 10000, 2)
  88. self.echo(value)
  89. def do_btn13(self, event): # 输入:文本
  90. #第三个参数表示显示类型,可选,有正常(QLineEdit.Normal)、密碼( QLineEdit. Password)、不显示( QLineEdit. NoEcho)三种情况
  91. value, ok = QInputDialog.getText(self, "输入框标题", "这是提示信息\n\n请输入文本:", QLineEdit.Normal, "这是默认值")
  92. self.echo(value)
  93. def do_btn14(self, event): # 输入:多文
  94. value, ok = QInputDialog.getMultiLineText(self, "输入框标题", "这是提示信息\n\n请输入地址:", "默认的\n我的地址是\n中国广东广州番禺")
  95. self.echo(value)
  96. def do_btn15(self, event): # 输入:选项
  97. #1为默认选中选项目,True/False 列表框是否可编辑。
  98. items = ["Spring", "Summer", "Fall", "Winter"]
  99. value, ok = QInputDialog.getItem(self, "输入框标题", "这是提示信息\n\n请选择季节:", items, 1, True)
  100. self.echo(value)
  101. # =====================================================================
  102. def do_btn21(self, event): # 消息:信息
  103. reply = QMessageBox.information(self,
  104. "消息框标题",
  105. "这是一条消息。",
  106. QMessageBox.Yes | QMessageBox.No)
  107. self.echo(reply)
  108. def do_btn22(self, event): # 消息:问答
  109. reply = QMessageBox.question(self,
  110. "消息框标题",
  111. "这是一条问答吗?",
  112. QMessageBox.Yes | QMessageBox.No)
  113. self.echo(reply)
  114. def do_btn23(self, event): # 消息:警告
  115. reply = QMessageBox.warning(self,
  116. "消息框标题",
  117. "这是一条警告!",
  118. QMessageBox.Yes | QMessageBox.No)
  119. self.echo(reply)
  120. def do_btn24(self, event): # 消息:危险
  121. reply = QMessageBox.ctitical(self,
  122. "消息框标题",
  123. "危险!程序即将强制退出!!!\n\n这个按钮再也点不开。",
  124. QMessageBox.Yes | QMessageBox.No)
  125. self.echo(reply)
  126. def do_btn25(self, event): # 消息:关于
  127. reply = QMessageBox.about(self,
  128. "消息框标题",
  129. "这是关于软件的说明。。。",
  130. QMessageBox.Yes | QMessageBox.No)
  131. self.echo(reply)
  132. # =====================================================================
  133. def do_btn31(self, event): # 文件:文件夹
  134. dir = QFileDialog.getExistingDirectory(self,
  135. "选取文件夹",
  136. "C:/") # 起始路径
  137. self.echo(dir)
  138. def do_btn32(self, event): # 文件:单文件
  139. file_, filetype = QFileDialog.getOpenFileName(self,
  140. "选取文件",
  141. "C:/",
  142. "All Files (*);;Text Files (*.txt)") #设置文件扩展名过滤,注意用双分号间隔
  143. self.echo(file_)
  144. def do_btn33(self, event): # 文件:多文件
  145. files, ok = QFileDialog.getOpenFileNames(self,
  146. "多文件选择",
  147. "C:/",
  148. "All Files (*);;Text Files (*.txt)")
  149. self.echo(files)
  150. def do_btn34(self, event): # 文件:保存
  151. file_, ok = QFileDialog.getSaveFileName(self,
  152. "文件保存",
  153. "C:/",
  154. "All Files (*);;Text Files (*.txt)")
  155. self.echo(file_)
  156. def do_btn35(self, event): # 文件:另存为
  157. file_, ok = QFileDialog.getSaveFileName(self,
  158. "文件另存为",
  159. "C:/",
  160. "All Files (*);;Text Files (*.txt)")
  161. self.echo(file_)
  162.  
  163. # =====================================================================
  164. def do_btn41(self, event): # 颜色
  165. color = QColorDialog.getColor(Qt.blue, self, "Select Color")
  166. self.echo(color)
  167. def do_btn42(self, event): # 字体
  168. font, ok = QFontDialog.getFont()
  169. self.echo(font)
  170. def do_btn43(self, event): # 自定义
  171. self.window2.show()
  172.  
  173. class MyWindow2(QWidget):
  174. '''自定义窗口'''
  175. # 知识点:
  176. # 1.为了得到返回值用到了自定义的信号/槽
  177. # 2.为了显示动态数字,使用了计时器
  178. before_close_signal = pyqtSignal(int) # 自定义信号(int类型)
  179. def __init__(self):
  180. super().__init__()
  181. self.sec = 0
  182. self.setWindowTitle('自定义窗口')
  183. self.resize(200,150)
  184.  
  185. self.lcd = QLCDNumber(18, self)
  186. btn1 = QPushButton(self, text="测试")
  187. btn2 = QPushButton(self, text="关闭")
  188.  
  189. layout = QVBoxLayout(self)
  190. layout.addWidget(self.lcd)
  191. layout.addWidget(btn1)
  192. layout.addWidget(btn2)
  193. self.timer = QTimer()
  194.  
  195. self.timer.timeout.connect(self.update) # 每次计时结束,触发update
  196. btn1.clicked.connect(self.startTimer)
  197. btn2.clicked.connect(self.stopTimer) # 去到关闭前的处理
  198. def update(self):
  199. self.sec += 1
  200. self.lcd.display(self.sec) # LED显示数字+1
  201. def startTimer(self):
  202. self.timer.start(1000) # 计时器每秒计数
  203.  
  204. def stopTimer(self):
  205. self.timer.stop()
  206. self.sec = 0
  207. self.before_close_signal.emit(self.lcd.value()) # 发送信号,带参数 888
  208. self.close() # 然后窗口关闭
  209.  
  210. # 默认关闭事件
  211. def closeEvent(self, e):
  212. self.stopTimer()
  213.  
  214. if __name__=="__main__":
  215. import sys
  216. app = QApplication(sys.argv)
  217. win = MyWindow()
  218. win.show()
  219. sys.exit(app.exec_())

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号