![]()
1 # -*- coding: utf-8 -*-
2 from PyQt5.QtGui import *
3 from PyQt5.QtCore import *
4 from PyQt5.QtWidgets import *
5 import sys
6
7
8 class DialogOptionsWidget(QWidget):
9 def __init__(self, parent=None):
10 super(DialogOptionsWidget, self).__init__(parent)
11
12 def addCheckBox(self, text, value):
13 pass
14
15 def addSpacer():
16 pass
17
18 def value():
19 pass
20
21 class StandardDialog(QDialog):
22 def __init__(self, parent=None):
23 super(StandardDialog, self).__init__(parent)
24
25 self.setWindowTitle("Standard Dialog")
26
27 frameStyle = QFrame.Sunken | QFrame.Panel
28
29 mainLayout = QVBoxLayout(self)
30 toolbox = QToolBox()
31 mainLayout.addWidget(toolbox)
32
33 self.errorMessageDialog = QErrorMessage(self)
34
35 pushButton_integer = QPushButton("QInputDialog.get&Int()")
36 pushButton_double = QPushButton("QInputDialog.get&Double()")
37 pushButton_item = QPushButton("QInputDialog.getIte&m()")
38 pushButton_text = QPushButton("QInputDialog.get&Text()")
39 pushButton_multiLineText = QPushButton("QInputDialog.get&MultiLineText()")
40 pushButton_color = QPushButton("QColorDialog.get&Color()")
41 pushButton_font = QPushButton("QFontDialog.get&Font()")
42 pushButton_directory = QPushButton("QFileDialog.getE&xistingDirectory()")
43 pushButton_openFileName = QPushButton("QFileDialog.get&OpenFileName()")
44 pushButton_openFileNames = QPushButton("QFileDialog.&getOpenFileNames()")
45 pushButton_saveFileName = QPushButton("QFileDialog.get&SaveFileName()")
46 pushButton_critical = QPushButton("QMessageBox.critica&l()")
47 pushButton_information = QPushButton("QMessageBox.i&nformation()")
48 pushButton_question = QPushButton("QQMessageBox.&question()")
49 pushButton_warning = QPushButton("QMessageBox.&warning()")
50 pushButton_error = QPushButton("QErrorMessage.showM&essage()")
51
52 self.label_integer = QLabel()
53 self.label_double = QLabel()
54 self.label_item = QLabel()
55 self.label_text = QLabel()
56 self.label_multiLineText = QLabel()
57 self.label_color = QLabel()
58 self.label_font = QLabel()
59 self.label_directory = QLabel()
60 self.label_openFileName = QLabel()
61 self.label_openFileNames = QLabel()
62 self.label_saveFileName = QLabel()
63 self.label_critical = QLabel()
64 self.label_information = QLabel()
65 self.label_question = QLabel()
66 self.label_warning = QLabel()
67 self.label_error = QLabel()
68
69 self.label_integer.setFrameStyle(frameStyle)
70 self.label_double.setFrameStyle(frameStyle)
71 self.label_item.setFrameStyle(frameStyle)
72 self.label_text.setFrameStyle(frameStyle)
73 self.label_multiLineText.setFrameStyle(frameStyle)
74 self.label_color.setFrameStyle(frameStyle)
75 self.label_font.setFrameStyle(frameStyle)
76 self.label_directory.setFrameStyle(frameStyle)
77 self.label_openFileName.setFrameStyle(frameStyle)
78 self.label_openFileNames.setFrameStyle(frameStyle)
79 self.label_saveFileName.setFrameStyle(frameStyle)
80 self.label_critical.setFrameStyle(frameStyle)
81 self.label_information.setFrameStyle(frameStyle)
82 self.label_question.setFrameStyle(frameStyle)
83 self.label_warning.setFrameStyle(frameStyle)
84 self.label_error.setFrameStyle(frameStyle)
85
86 page = QWidget()
87 layout = QGridLayout(page)
88 layout.setColumnStretch(1, 1)
89 layout.setColumnMinimumWidth(1, 250)
90 layout.addWidget(pushButton_integer, 0, 0)
91 layout.addWidget(self.label_integer, 0, 1)
92 layout.addWidget(pushButton_double, 1, 0)
93 layout.addWidget(self.label_double, 1, 1)
94 layout.addWidget(pushButton_item, 2, 0)
95 layout.addWidget(self.label_item, 2, 1)
96 layout.addWidget(pushButton_text, 3, 0)
97 layout.addWidget(self.label_text, 3, 1)
98 layout.addWidget(pushButton_multiLineText, 4, 0)
99 layout.addWidget(self.label_multiLineText, 4, 1)
100 layout.addItem(QSpacerItem(0, 0, QSizePolicy.Ignored, QSizePolicy.MinimumExpanding), 5, 0)
101 toolbox.addItem(page, "Input Dialog")
102
103 page = QWidget()
104 layout = QGridLayout(page)
105 layout.setColumnStretch(1, 1)
106 # layout.setColumnMinimumWidth(1,250)
107 layout.addWidget(pushButton_color, 0, 0)
108 layout.addWidget(self.label_color, 0, 1)
109 colorDialogOptionsWidget = DialogOptionsWidget()
110 colorDialogOptionsWidget.addCheckBox("Do not use native dialog", QColorDialog.DontUseNativeDialog)
111 colorDialogOptionsWidget.addCheckBox("Show alpha channel", QColorDialog.ShowAlphaChannel)
112 colorDialogOptionsWidget.addCheckBox("No buttons", QColorDialog.NoButtons)
113 layout.addItem(QSpacerItem(0, 0, QSizePolicy.Ignored, QSizePolicy.MinimumExpanding), 1, 0)
114 layout.addWidget(colorDialogOptionsWidget, 2, 0, 1, 2)
115 toolbox.addItem(page, "Color Dialog")
116
117 page = QWidget()
118 layout = QGridLayout(page)
119 layout.setColumnStretch(1, 1)
120 layout.addWidget(pushButton_font, 0, 0)
121 layout.addWidget(self.label_font, 0, 1)
122 fontDialogOptionsWidget = DialogOptionsWidget()
123 fontDialogOptionsWidget.addCheckBox("Do not use native dialog", QFontDialog.DontUseNativeDialog)
124 fontDialogOptionsWidget.addCheckBox("No buttons", QFontDialog.NoButtons)
125 layout.addItem(QSpacerItem(0, 0, QSizePolicy.Ignored, QSizePolicy.MinimumExpanding), 1, 0)
126 layout.addWidget(fontDialogOptionsWidget, 2, 0, 1, 2)
127 toolbox.addItem(page, "Font Dialog")
128
129 page = QWidget()
130 layout = QGridLayout(page)
131 layout.setColumnStretch(1, 1)
132 layout.addWidget(pushButton_directory, 0, 0)
133 layout.addWidget(self.label_directory, 0, 1)
134 layout.addWidget(pushButton_openFileName, 1, 0)
135 layout.addWidget(self.label_openFileName, 1, 1)
136 layout.addWidget(pushButton_openFileNames, 2, 0)
137 layout.addWidget(self.label_openFileNames, 2, 1)
138 layout.addWidget(pushButton_saveFileName, 3, 0)
139 layout.addWidget(self.label_saveFileName, 3, 1)
140 fileDialogOptionsWidget = DialogOptionsWidget()
141 fileDialogOptionsWidget.addCheckBox("Do not use native dialog", QFileDialog.DontUseNativeDialog)
142 fileDialogOptionsWidget.addCheckBox("Show directories only", QFileDialog.ShowDirsOnly)
143 fileDialogOptionsWidget.addCheckBox("Do not resolve symlinks", QFileDialog.DontResolveSymlinks)
144 fileDialogOptionsWidget.addCheckBox("Do not confirm overwrite", QFileDialog.DontConfirmOverwrite)
145 fileDialogOptionsWidget.addCheckBox("Do not use sheet", QFileDialog.DontUseSheet)
146 fileDialogOptionsWidget.addCheckBox("Readonly", QFileDialog.ReadOnly)
147 fileDialogOptionsWidget.addCheckBox("Hide name filter details", QFileDialog.HideNameFilterDetails)
148 layout.addItem(QSpacerItem(0, 0, QSizePolicy.Ignored, QSizePolicy.MinimumExpanding), 4, 0)
149 layout.addWidget(fileDialogOptionsWidget, 5, 0, 1, 2)
150 toolbox.addItem(page, "File Dialogs")
151
152 page = QWidget()
153 layout = QGridLayout(page)
154 layout.setColumnStretch(1, 1)
155 layout.addWidget(pushButton_critical, 0, 0)
156 layout.addWidget(self.label_critical, 0, 1)
157 layout.addWidget(pushButton_information, 1, 0)
158 layout.addWidget(self.label_information, 1, 1)
159 layout.addWidget(pushButton_question, 2, 0)
160 layout.addWidget(self.label_question, 2, 1)
161 layout.addWidget(pushButton_warning, 3, 0)
162 layout.addWidget(self.label_warning, 3, 1)
163 layout.addWidget(pushButton_error, 4, 0)
164 layout.addWidget(self.label_error, 4, 1)
165 layout.addItem(QSpacerItem(0, 0, QSizePolicy.Ignored, QSizePolicy.MinimumExpanding), 5, 0)
166 toolbox.addItem(page, "Message Boxes")
167
168 pushButton_integer.clicked.connect(self.setInteger)
169 pushButton_double.clicked.connect(self.setDouble)
170 pushButton_item.clicked.connect(self.setItem)
171 pushButton_text.clicked.connect(self.setText)
172 pushButton_multiLineText.clicked.connect(self.setMultiLineText)
173 pushButton_color.clicked.connect(self.setColor)
174 pushButton_font.clicked.connect(self.setFont)
175 pushButton_directory.clicked.connect(self.setExistingDirectory)
176 pushButton_openFileName.clicked.connect(self.setOpenFileName)
177 pushButton_openFileNames.clicked.connect(self.setOpenFileNames)
178 pushButton_saveFileName.clicked.connect(self.setSaveFileName)
179 pushButton_critical.clicked.connect(self.criticalMessage)
180 pushButton_information.clicked.connect(self.informationMessage)
181 pushButton_question.clicked.connect(self.questionMessage)
182 pushButton_warning.clicked.connect(self.warningMessage)
183 pushButton_error.clicked.connect(self.errorMessage)
184
185 # 输入对话框 取整数
186 def setInteger(self):
187 intNum, ok = QInputDialog.getInt(self, "QInputDialog.getInteger()", "Percentage:", 25, 0, 100, 1)
188 if ok:
189 self.label_integer.setText(str(intNum))
190
191 # 输入对话框 取实数
192 def setDouble(self):
193 doubleNum, ok = QInputDialog.getDouble(self, "QInputDialog.getDouble()", "Amount:", 37.56, -10000, 10000, 2)
194 if ok:
195 self.label_double.setText(str(doubleNum))
196
197 # 输入对话框 取列表项
198 def setItem(self):
199 items = ["Spring", "Summer", "Fall", "Winter"]
200 item, ok = QInputDialog.getItem(self, "QInputDialog.getItem()", "Season:", items, 0, False)
201 if ok and item:
202 self.label_item.setText(item)
203
204 # 输入对话框 取文本
205 def setText(self):
206 text, ok = QInputDialog.getText(self, "QInputDialog.getText()", "User name:", QLineEdit.Normal,
207 QDir.home().dirName())
208 if ok and text:
209 self.label_text.setText(text)
210
211 # 输入对话框 取多行文本
212 def setMultiLineText(self):
213 text, ok = QInputDialog.getMultiLineText(self, "QInputDialog.getMultiLineText()", "Address:",
214 "John Doe\nFreedom Street")
215 if ok and text:
216 self.label_multiLineText.setText(text)
217
218 # 颜色对话框 取颜色
219 def setColor(self):
220 # options = QColorDialog.ColorDialogOptions(QFlag.QFlag(colorDialogOptionsWidget.value()))
221 color = QColorDialog.getColor(Qt.green, self, "Select Color")
222
223 if color.isValid():
224 self.label_color.setText(color.name())
225 self.label_color.setPalette(QPalette(color))
226 self.label_color.setAutoFillBackground(True)
227
228 # 字体对话框 取字体
229 def setFont(self):
230 # options = QFontDialog.FontDialogOptions(QFlag(fontDialogOptionsWidget.value()))
231 # font, ok = QFontDialog.getFont(ok, QFont(self.label_font.text()), self, "Select Font",options)
232 font, ok = QFontDialog.getFont()
233 if ok:
234 self.label_font.setText(font.key())
235 self.label_font.setFont(font)
236
237 # 目录对话框 取目录
238 def setExistingDirectory(self):
239 # options = QFileDialog.Options(QFlag(fileDialogOptionsWidget->value()))
240 # options |= QFileDialog.DontResolveSymlinks | QFileDialog.ShowDirsOnly
241 directory = QFileDialog.getExistingDirectory(self,
242 "QFileDialog.getExistingDirectory()",
243 self.label_directory.text())
244 if directory:
245 self.label_directory.setText(directory)
246
247 # 打开文件对话框 取文件名
248 def setOpenFileName(self):
249 # options = QFileDialog.Options(QFlag(fileDialogOptionsWidget.value()))
250 # selectedFilter
251 fileName, filetype = QFileDialog.getOpenFileName(self,
252 "QFileDialog.getOpenFileName()",
253 self.label_openFileName.text(),
254 "All Files (*);;Text Files (*.txt)")
255 if fileName:
256 self.label_openFileName.setText(fileName)
257
258 # 打开文件对话框 取一组文件名
259 def setOpenFileNames(self):
260 # options = QFileDialog.Options(QFlag(fileDialogOptionsWidget.value()))
261 # selectedFilter
262 openFilesPath = "D:/documents/pyMarksix/draw/"
263 files, ok = QFileDialog.getOpenFileNames(self,
264 "QFileDialog.getOpenFileNames()",
265 openFilesPath,
266 "All Files (*);;Text Files (*.txt)")
267
268 if len(files):
269 self.label_openFileNames.setText(", ".join(files))
270
271 # 保存文件对话框 取文件名
272 def setSaveFileName(self):
273 # options = QFileDialog.Options(QFlag(fileDialogOptionsWidget.value()))
274 # selectedFilter
275 fileName, ok = QFileDialog.getSaveFileName(self,
276 "QFileDialog.getSaveFileName()",
277 self.label_saveFileName.text(),
278 "All Files (*);;Text Files (*.txt)")
279 if fileName:
280 self.label_saveFileName.setText(fileName)
281
282 def criticalMessage(self):
283 # reply = QMessageBox.StandardButton()
284 MESSAGE = "批评!"
285 reply = QMessageBox.critical(self,
286 "QMessageBox.critical()",
287 MESSAGE,
288 QMessageBox.Abort | QMessageBox.Retry | QMessageBox.Ignore)
289 if reply == QMessageBox.Abort:
290 self.label_critical.setText("Abort")
291 elif reply == QMessageBox.Retry:
292 self.label_critical.setText("Retry")
293 else:
294 self.label_critical.setText("Ignore")
295
296 def informationMessage(self):
297 MESSAGE = "信息"
298 reply = QMessageBox.information(self, "QMessageBox.information()", MESSAGE)
299 if reply == QMessageBox.Ok:
300 self.label_information.setText("OK")
301 else:
302 self.label_information.setText("Escape")
303
304 def questionMessage(self):
305 MESSAGE = "疑问"
306 reply = QMessageBox.question(self, "QMessageBox.question()",
307 MESSAGE,
308 QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel)
309 if reply == QMessageBox.Yes:
310 self.label_question.setText("Yes")
311 elif reply == QMessageBox.No:
312 self.label_question.setText("No")
313 else:
314 self.label_question.setText("Cancel")
315
316 def warningMessage(self):
317 MESSAGE = "警告文本"
318 msgBox = QMessageBox(QMessageBox.Warning,
319 "QMessageBox.warning()",
320 MESSAGE,
321 QMessageBox.Retry | QMessageBox.Discard | QMessageBox.Cancel,
322 self)
323 msgBox.setDetailedText("详细信息。。。")
324 # msgBox.addButton("Save &Again", QMessageBox.AcceptRole)
325 # msgBox.addButton("&Continue", QMessageBox.RejectRole)
326 if msgBox.exec() == QMessageBox.AcceptRole:
327 self.label_warning.setText("Retry")
328 else:
329 self.label_warning.setText("Abort")
330
331 def errorMessage(self):
332 self.errorMessageDialog.showMessage(
333 "This dialog shows and remembers error messages. "
334 "If the checkbox is checked (as it is by default), "
335 "the shown message will be shown again, "
336 "but if the user unchecks the box the message "
337 "will not appear again if QErrorMessage.showMessage() "
338 "is called with the same message.")
339 self.label_error.setText("If the box is unchecked, the message "
340 "won't appear again.")
341
342
343 app = QApplication(sys.argv)
344 form = StandardDialog()
345 form.show()
346 app.exec_()