pyqt5 弹窗大全--修复版

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

 

posted @ 2019-07-17 17:13  耳虫  阅读(1475)  评论(0编辑  收藏  举报