目录:
一、对话框综合示例
二、QDialog
三、QInputDialog
四、QMessageDialog
五、QFileDialog
pyqt5的对话框有多种类型,比如输入对话框(QInputDialog)、颜色对话框(QColorDialog)、字体对话框(QFontDialog)、消息对话框(QMessageBox)、文件对话框(QFileDialog)等,他们都是Dialog的子类。
对话框的使用可以提高人机交互,方便用户输入数据,修改参数,改变设置,选择文件等。
一、对话框综合示例
下面,我们通过一个小例子初步了解各类对话框。首先需要说明下,所有的对话框默认为模态窗口,即用户必须处理完当前对话框之后,才可以与父窗口交互。
1 importsys,os2 from PyQt5.QtGui importQIcon3 from PyQt5.QtWidgets import(QWidget,QHBoxLayout,QPushButton,QTextEdit,QFontDialog, QApplication,4 QColorDialog,QInputDialog,QVBoxLayout,QFileDialog,QMessageBox)5
6 path = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))7
8 classMyWindow(QWidget):9 def __init__(self):10 super(MyWindow, self).__init__()11 self.initUI()12
13 definitUI(self):14 self.setWindowTitle('对话框示例')15 self.setWindowIcon(QIcon(r'%s\4.图标素材\chuan.ico' %path))16 self.setGeometry(600,300,500,400)17
18 '''创建三个按键,一个多行文本框'''
19 btn_input = QPushButton('输入')20 btn_font = QPushButton('字体')21 btn_color = QPushButton('颜色')22 btn_file = QPushButton('文件')23 self.text =QTextEdit()24
25 '''将三个按键布置在用一个水平布局容器中,然后将水平布局视为一个整体,与文本框布置在垂直布局中'''
26 hbx =QHBoxLayout()27 hbx.addWidget(btn_input)28 hbx.addWidget(btn_font)29 hbx.addWidget(btn_color)30 hbx.addWidget(btn_file)31
32 vbx =QVBoxLayout()33 vbx.addLayout(hbx)34 vbx.addWidget(self.text)35
36 self.setLayout(vbx)37
38 btn_input.clicked.connect(self.inputDialog)39 btn_font.clicked.connect(self.fontDialog)40 btn_color.clicked.connect(self.colorDialog)41 btn_file.clicked.connect(self.fileDialog)42
43 definputDialog(self):44 text,ok = QInputDialog.getText(self,'输入文本框','请输入您的文本内容')45 #返回值是一个包含两个元素的元组
46 ifok:47 self.text.setText(text)48
49 deffontDialog(self):50 font, ok = QFontDialog.getFont() #返回值是一个包含两个元素的元组
51 ifok:52 self.text.setFont(font)53
54 defcolorDialog(self):55 color =QColorDialog.getColor()56 if color.isValid: #通过isValid()可以判断用户选择的颜色是否有效,若用户选择取消,isValid()将返回false
57 self.text.setTextColor(color)58
59 deffileDialog(self):60 '''打开单个文件'''
61 fname, _ = QFileDialog.getOpenFileName(self, '打开', '/home','Text Files (*.txt)')62 #返回值是包含2个元素的元组,但这里只需要第一个;这里还加了一个过滤器,只打开txt文件
63 iffname:64 f = open(fname, 'r')65 with f:66 data =f.read()67 self.text.setText(data)68
69 defcloseEvent(self, QCloseEvent):70 reply