一、QDialog对话框控件介绍

  是对话窗口类型;

  对话窗口是顶级窗口,主要用于短期任务和与用户的简短通信;

  可能是模态的或非模态对话框;

  可以提供返回值,它们可以有默认按钮。

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

二、QDialog的功能作用

1、模态与非模态对话框+控件创建

 1 mport sys
 2 from PyQt5.Qt import *
 3 
 4 app=QApplication(sys.argv)
 5 
 6 window=QWidget()
 7 window.setWindowTitle("QDialog控件的创建")
 8 window.resize(500,500)
 9 
10 d = QDialog(window)
11 d.setWindowTitle("对话框")
12 # d.exec() # 处理完了之后才有另一个窗口(模态对话框应用恒旭级别)
13 # d.open() # 阻塞,不处理这个窗口,另外一个没法点击(模态对话框窗口级别)
14 d.show() # 两个窗口之间随意点击(非模态对话框)
15 
16 
17 window.show()
18 sys.exit(app.exec_())

2、模态设置

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 # d.setModal(True) # 设置为模态
2 # d.setWindowModality(Qt.WindowModal) # 设置为窗口级别模态
3 d.setWindowModality(Qt.ApplicationModal) # 设置为应用程序级别模态

3、是否显示尺寸调整控件

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 d.setSizeGripEnabled(True)
2 print(d.isSizeGripEnabled()) # 查看

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

4、常用操作槽

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

 1 # 按钮
 2 btn1 = QPushButton(d)
 3 btn1.setText("btn1")
 4 btn1.move(20,20)
 5 btn1.clicked.connect(lambda :d.accept()) # 返回1
 6 
 7 btn2 = QPushButton(d)
 8 btn2.setText("btn1")
 9 btn2.move(60,60)
10 btn2.clicked.connect(lambda :d.reject()) # 返回0
11 
12 btn3 = QPushButton(d)
13 btn3.setText("btn1")
14 btn3.move(60,130)
15 btn3.clicked.connect(lambda :d.done(8)) # 返回8

5、设置和获取数值

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 btn3.clicked.connect(lambda :d.setResult(8888)) # 点击窗口不关闭
2 btn2.clicked.connect(lambda :print(d.result())) # 打印接收的结果

6、信号

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 d.accepted.connect(lambda :print("点击了,接收按钮"))
2 d.rejected.connect(lambda :print("点击了,拒绝按钮"))
3 d.finished.connect(lambda :print("点击了,完成按钮"))

三、子类QFontDialog

  提供了一种选择字体的对话框控件

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

 1、构造函数

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 # fd = QFontDialog(self)
2 font = QFont()
3 font.setFamily("宋体")
4 font.setPointSize(36)
5 # fd = QFontDialog(font,self) # 构造函数

2、打开对话框

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

3、当前字体和最终选中字体

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

 1 fd.setCurrentFont(font) # 设置当前字体
 2 
 3 fd.show()
 4 
 5 btn = QPushButton(self)
 6 btn.setText("按钮")
 7 btn.move(100, 100)
 8 
 9 def fon_sel():
10     print("字体已经被选择",fd.selectedFont().family()) # 最终选中字体
11 # btn.clicked.connect(lambda :fd.open(fon_sel()))
12 
13 if fd.exec():
14     print(fd.selectedFont().family()) # 最终选中字体

4、选项控制

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

 1 # *******************QFontDialog选项控制**********************开始
 2 from PyQt5.Qt import *
 3 
 4 class Window(QWidget):
 5     def __init__(self):
 6         super().__init__()
 7         self.setWindowTitle("QFontDialog")
 8         self.resize(500, 500)
 9         self.setup_ui()
10 
11     def setup_ui(self):
12         # fd = QFontDialog(self)
13         font = QFont()
14         font.setFamily("宋体")
15         font.setPointSize(36)
16         # fd = QFontDialog(font,self) # 构造函数
17         fd = QFontDialog(self)
18         fd.setCurrentFont(font)
19 
20         btn = QPushButton(self)
21         btn.setText("按钮")
22         btn.move(100, 100)
23 
24         # 选项控制
25         # fd.setOption(QFontDialog.NoButtons) # 字体选项没有按键
26         fd.setOptions(QFontDialog.NoButtons | QFontDialog.MonospacedFonts) # 字体选项没有按键
27         print(fd.testOption(QFontDialog.MonospacedFonts))
28         print(fd.testOption(QFontDialog.ScalableFonts))
29 
30         fd.show()
31 
32         # 实时显示当前字体
33         # label = QLabel(self)
34         label.setText("哈哈")
35         label.move(200,100)
36         def cfc(font):
37             label.setFont(font)
38             label.adjustSize()
39         fd.currentFontChanged.connect(cfc)
40 
41 
42 if __name__ == '__main__':
43     import sys
44 
45     app=QApplication(sys.argv)
46 
47     window=Window()
48     window.show()
49     sys.exit(app.exec_())
50 # *******************QFontDialog选项控制**********************结束

选项控制

5、静态方法

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

 1 # *******************QFontDialog静态方法**********************开始
 2 from PyQt5.Qt import *
 3 
 4 class Window(QWidget):
 5     def __init__(self):
 6         super().__init__()
 7         self.setWindowTitle("QFontDialog")
 8         self.resize(500, 500)
 9         self.setup_ui()
10 
11     def setup_ui(self):
12         font = QFont()
13         font.setFamily("宋体")
14         font.setPointSize(36)
15 
16         btn = QPushButton(self)
17         btn.setText("按钮")
18         btn.move(100, 100)
19 
20         label = QLabel(self)
21         label.setText("哈哈")
22         label.move(200,100)
23 
24         def font_sel():
25             result = QFontDialog.getFont(font,self,"选择一个好看的字体")
26             if result[1]:
27                 label.setFont(result[0])
28                 label.adjustSize()
29 
30         btn.clicked.connect(font_sel)
31 
32 if __name__ == '__main__':
33     import sys
34 
35     app=QApplication(sys.argv)
36 
37     window=Window()
38     window.show()
39     sys.exit(app.exec_())
40 # *******************QFontDialog静态方法**********************结束

静态方法

 四、子类QColorDialog

  颜色对话框的功能是允许用户选择颜色。

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

1、构造函数

(1)框架

 PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 cd = QColorDialog(QColor(100,200,150),self)
2 cd.setWindowTitle("选择一个好看的颜色")

2、打开对话框

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

3、当前颜色+最终选中颜色

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 def color(col):
2     palette = QPalette()
3     palette.setColor(QPalette.Background,col)
4     self.setPalette(palette)
5 cd.colorSelected.connect(color) 

4、选项控制

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

 1 # ******************QColorDialog-选项控制***********************开始
 2 from PyQt5.Qt import *
 3 
 4 class Window(QWidget):
 5     def __init__(self):
 6         super().__init__()
 7         self.setWindowTitle("QFontDialog")
 8         self.resize(500, 500)
 9         self.setup_ui()
10 
11     def setup_ui(self):
12         cd = QColorDialog(QColor(100,200,150),self)
13         cd.setWindowTitle("选择一个好看的颜色")
14 
15         # 选项控制
16         def color():
17             palette = QPalette()
18             palette.setColor(QPalette.Background,cd.currentColor())
19             self.setPalette(palette)
20 
21         cd.setOptions(QColorDialog.NoButtons | QColorDialog.ShowAlphaChannel) # 无按钮+透明度
22         cd.currentColorChanged.connect(color) # 监控当前颜色改变
23 
24         cd.show()
25 
26 if __name__ == '__main__':
27     import sys
28 
29     app=QApplication(sys.argv)
30 
31     window=Window()
32     window.show()
33     sys.exit(app.exec_())
34 # *****************QColorDialog-选项控制************************结束

选项控制

5、静态方法

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

 1 # *******************QColorDialog-静态方法**********************开始
 2 from PyQt5.Qt import *
 3 
 4 class Window(QWidget):
 5     def __init__(self):
 6         super().__init__()
 7         self.setWindowTitle("QFontDialog")
 8         self.resize(500, 500)
 9         self.setup_ui()
10 
11     def setup_ui(self):
12         cd = QColorDialog(QColor(100,200,150),self)
13         cd.setWindowTitle("选择一个好看的颜色")
14 
15         btn = QPushButton(self)
16         btn.move(100,100)
17         btn.setText("测试按钮")
18 
19         def test():
20             color = QColorDialog.getColor(QColor(10,20,100),self,"选择颜色")
21             print(color)
22 
23         btn.clicked.connect(test)
24 
25         # btn.clicked.connect(lambda :print(QColorDialog.customCount()))
26         # btn.clicked.connect(lambda :QColorDialog.setCustomColor(3,QColor(100,200,50)))
27 
28         cd.show()
29 
30 if __name__ == '__main__':
31     import sys
32 
33     app=QApplication(sys.argv)
34 
35     window=Window()
36     window.show()
37     sys.exit(app.exec_())
38 # *******************QColorDialog-静态方法**********************结束

静态方法

(3)案例–按钮颜色改变

 1 # *******************QColorDialog-按钮颜色改变**********************开始
 2 from PyQt5.Qt import *
 3 
 4 class Window(QWidget):
 5     def __init__(self):
 6         super().__init__()
 7         self.setWindowTitle("按钮颜色改变")
 8         self.resize(500, 500)
 9         self.setup_ui()
10 
11     def setup_ui(self):
12         cd = QColorDialog(self)
13 
14         btn = QPushButton(self)
15         btn.setText("测试按钮")
16         btn.move(100,100)
17 
18         def btn_color(color):
19             palette = QPalette()
20             palette.setColor(QPalette.ButtonText,color)
21             btn.setPalette((palette))
22 
23         # cd.colorSelected.connect(btn_color) # 选择颜色
24         cd.currentColorChanged.connect(btn_color) # 当前颜色实时展示
25 
26         cd.show()
27 
28 if __name__ == '__main__':
29     import sys
30 
31     app=QApplication(sys.argv)
32 
33     window=Window()
34     window.show()
35     sys.exit(app.exec_())
36 # *******************QColorDialog-按钮颜色改变**********************结束

按钮颜色改变

 五、子类QFileDialog

  提供一个对话框,允许用户选择文件或目录;

  允许用户遍历文件系统,以选择一个或多个文件或目录。

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

1、最简单的获取方式(静态方法)

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

 1 # *******************QFileDialog-最简单的获取方式**********************开始
 2 from PyQt5.Qt import *
 3 
 4 class Window(QWidget):
 5     def __init__(self):
 6         super().__init__()
 7         self.setWindowTitle("QFileDialog")
 8         self.resize(500, 500)
 9         self.setup_ui()
10 
11     def setup_ui(self):
12         # 获取文件的路径
13         # result = QFileDialog.getOpenFileName(self,"选择一个py文件","./","ALL(*.*);;
14         # images(*.png *.jpg);;Python文件(*.py)","Python文件(*.py)") # 单选一个文件
15         # result = QFileDialog.getOpenFileNames(self,"选择一个py文件","./","ALL(*.*);;
16         # images(*.png *.jpg);;Python文件(*.py)","Python文件(*.py)") # 多选文件
17         # result = QFileDialog.getOpenFileUrl(self,"选择一个py文件",QUrl("./"),"ALL(*.*);;
18         # images(*.png *.jpg);;Python文件(*.py)","Python文件(*.py)") # 获取文件的url地址
19 
20         # 保存文件
21         # result = QFileDialog.getSaveFileName(self,"选择一个py文件","./","ALL(*.*);;
22         # images(*.png *.jpg);;Python文件(*.py)","Python文件(*.py)") # 保存文件
23 
24         # 获取文件夹的路径
25         # result = QFileDialog.getExistingDirectory(self,"选择一个py文件","./")
26         result = QFileDialog.getExistingDirectoryUrl(self,"选择一个py文件",QUrl("./"))
27 
28         print(result)
29 
30 if __name__ == '__main__':
31     import sys
32 
33     app=QApplication(sys.argv)
34 
35     window=Window()
36     window.show()
37     sys.exit(app.exec_())
38 # *******************QFileDialog-最简单的获取方式**********************结束

最简单的获取方式

2、构造函数

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

 1 # *******************QFileDialog--构造函数**********************开始
 2 from PyQt5.Qt import *
 3 
 4 class Window(QWidget):
 5     def __init__(self):
 6         super().__init__()
 7         self.setWindowTitle("QFileDialog")
 8         self.resize(500, 500)
 9         self.setup_ui()
10 
11     def setup_ui(self):
12         def test():
13             fd = QFileDialog(self,"选择一个文件","../","ALL(*.*);;
14                 images(*.png *.jpg);;Python文件(*.py)")
15             fd.fileSelected.connect(lambda file:print(file)) # 获取到路径
16             fd.open()
17 
18 
19         btn = QPushButton(self)
20         btn.setText("测试按钮")
21         btn.move(100,100)
22         btn.clicked.connect(test)
23 
24 if __name__ == '__main__':
25     import sys
26 
27     app=QApplication(sys.argv)
28 
29     window=Window()
30     window.show()
31     sys.exit(app.exec_())
32 # *******************QFileDialog--构造函数**********************结束

构造函数

3、接收模式

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

fd.setAcceptMode(QFileDialog.AcceptSave) # 保存一个文件

4、默认后缀

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

fd.setDefaultSuffix("txt") # 默认后缀名

5、设置文件模式

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

fd.setFileMode(QFileDialog.Directory) # 设置文件模式

6、设置名称过滤器

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 # fd.setNameFilter("IMG(*.jpg *.png *.jpeg)") # 单个
2 fd.setNameFilters(["ALL(*.*)","images(*.png *.jpg)","Python文件(*.py)"]) # 多个(列表)

7、显示信息的详细程度

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

fd.setViewMode(QFileDialog.Detail) # 设置显示信息的详细程度

8、设置指定角色的标签名称

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 fd.setLabelText(QFileDialog.FileName,"你需要打开的文件")
2 fd.setLabelText(QFileDialog.Accept,"你的接受")
3 fd.setLabelText(QFileDialog.Reject,"你的拒绝")

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

9、打开对话框

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

10、信号

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 # 信号
2 # fd.currentChanged.connect(lambda path:print("当前路径字符串发生改变",path))
3 # fd.currentUrlChanged.connect(lambda url:print("当前路径QUrl发生改变",url))
4 # fd.directoryEntered.connect(lambda path:print("当前目录字符串进入时",path))
5 # fd.directoryUrlEntered.connect(lambda url:print("当前目录QUrl进入时",url))
6 fd.filterSelected.connect(lambda filter:print("当前名称过滤字符串被选中时",filter))

六、子类QInputDialog

  提供了一个简单方便的对话框,获得来自用户的单个值;

  输入值可以提供字符串,数字或列表中的项目;

  设置标签以及告知用户应输入的内容。

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

1、常用的静态方法

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 # result = QInputDialog.getInt(self,"xxx1","xxx2",888,8,890,5) #(父控件,大标题,小标题,默认值,最小值,最大值,步长)
2 # result = QInputDialog.getDouble(self,"xxx1","xxx2",888,decimals = 2) #(父控件,大标题,小标题,默认值,小数位数)
3 # result = QInputDialog.getText(self,"xxx1","xxx2",echo=QLineEdit.Password) #(父控件,大标题,小标题,密文模式)
4 # result = QInputDialog.getMultiLineText(self,"xxx1","xxx2","default") #(父控件,大标题,小标题,默认值)
5 result = QInputDialog.getItem(self,"xxx1","xxx2",['1','2','3'],2,True) #(父控件,大标题,小标题,列表,默认值位置,可编辑)

2、构造函数

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 # 构造函数
2 input_d = QInputDialog(self, Qt.FramelessWindowHint)  # 无边框
3 input_d.show()

 3、选项设置

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 # 选项控制
2 input_d.setOption(QInputDialog.UseListViewForComboBoxItems)
3 input_d.setComboBoxItems(['1', '2', '3'])

4、输入模式

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

5、界面文本设置

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 # 界面文本设置
2 input_d.setLabelText("请输入你的姓名")
3 input_d.setOkButtonText("好的")
4 input_d.setCancelButtonText("我想取消")

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

6、各个小分类设置

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 # 各个小分类设置
2 # 浮点型
3 input_d.setInputMode(QInputDialog.DoubleInput)  # 模式设置
4 input_d.setDoubleRange(9.9, 19.9)
5 input_d.setDoubleStep(0.002)
6 input_d.setDoubleDecimals(3)  # 3位小数
7 # 下拉列表
8 input_d.setComboBoxItems(['abc', '123', '4444'])  # 模式切换为TextIput时,可展示

7、信号

(1)框架

PyQt5Day24–输入控件QDialog(对话框控件)-冯金伟博客园

(2)操作及展示

1 # 信号
2 input_d.doubleValueChanged.connect(lambda val: print("浮点型数据发生改变", val))
3 input_d.doubleValueSelected.connect(lambda val: print("浮点型数据最终被选中", val))