ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PyQt5Day24--输入控件QDialog(对话框控件)

2020-05-01 15:00:39  阅读:348  来源: 互联网

标签:__ 控件 对话框 self sys QDialog fd connect btn


一、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)框架

(2)操作及展示

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

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

(1)框架

(2)操作及展示

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

4、常用操作槽

(1)框架

(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)框架

(2)操作及展示

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

6、信号

(1)框架

(2)操作及展示

 

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

三、子类QFontDialog

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

 1、构造函数

(1)框架

(2)操作及展示

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

2、打开对话框

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

(1)框架

(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)框架

(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)框架

(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

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

1、构造函数

(1)框架

 

(2)操作及展示

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

2、打开对话框

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

(1)框架

(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)框架

(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)框架

(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

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

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

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

(1)框架

(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)框架

(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)框架

(2)操作及展示

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

4、默认后缀

(1)框架

(2)操作及展示

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

5、设置文件模式

(1)框架

(2)操作及展示

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

6、设置名称过滤器

(1)框架

(2)操作及展示

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

7、显示信息的详细程度

(1)框架

(2)操作及展示

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

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

(1)框架

(2)操作及展示

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

9、打开对话框

10、信号

(1)框架

(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

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

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

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

1、常用的静态方法

(1)框架

(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)框架

(2)操作及展示

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

 3、选项设置

(1)框架

(2)操作及展示

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

4、输入模式

5、界面文本设置

(1)框架

(2)操作及展示

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

6、各个小分类设置

(1)框架

(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)框架

(2)操作及展示

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

 

标签:__,控件,对话框,self,sys,QDialog,fd,connect,btn
来源: https://www.cnblogs.com/fengxb1213/p/12766229.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有