zoukankan      html  css  js  c++  java
  • PyQt5Day24--输入控件QDialog(对话框控件)

    一、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))
  • 相关阅读:
    SVN被锁定解决办法
    onchange监听input值变化及input隐藏后change事件不触发的原因与解决方法(设置readonly后onchange不起作用的解决方案)
    button的格式的问题
    javaScript年份下拉列表框内容为当前年份及前后50年
    ORACLE导入、导出所有数据到文件的SQL语句
    Oracle存储过程学习笔记
    SQlServer的日期相减(间隔)datediff函数
    td中嵌套table,让table完全填充父元素td
    Cause: org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: java.sql.SQLException: 不支持的特性
    HTML认知
  • 原文地址:https://www.cnblogs.com/fengxb1213/p/12766229.html
Copyright © 2011-2022 走看看