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_())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM