PyQt5基础知识 超详细!!!(含代码)

时间:2024-11-11 09:54:19

在哔哩哔哩中看的教程整理的笔记:视频链接/video/BV1VE411t7kC?p=1

目录

一.水平布局

二.垂直布局

三.Grid 栅格布局

四. form表单布局

五.组合垂直和水平布局

六.绝对布局

七.分割线与间隙

八.控件尺寸的最大值与最小值

九.尺寸策略(sizePolicy)

十.伙伴关系

十一.Tab顺序

十二.信号和槽

十三 . 添加菜单栏与工具栏

十四.使用python代码编写

十五.让主窗口居中显示

十六.点击按钮退出应用程序

十七.屏幕坐标系

十八.设置窗口和应用程序图标

十九.为控件添加提示消息

二十.QLabel控件的基本用法

二十一. QLabel与伙伴控件

二十二.限制QLineEdit控件的输入

二十三.QLineEdit综合案例

二十四.QTextEdit控制输入多行文本

二十五. 按钮控件

二十六.使用QDialog显示通用对话框

二十七.显示不同类型的消息对话框

二十八.显示不同类型的消息对话框

二十九.文件对话框

三十.选项卡控件

三十一.堆栈窗口控件

三十二.停靠控件

三十三.容纳多文档的窗口


 


 

 

一.水平布局

两种方法:

 1.选中控件——》右键布局——》水平布局

 的horizontal ——》将部件拖进去

设计的ui程序只是设计的,要真正在程序中调用要转换成.py文件

方法三:在pycharm中设置(拓展工具中设置PyUIC,具体设置方法自行查找)

 

二.垂直布局

三.Grid 栅格布局

N行m列

 

 

四. form表单布局

N行两列

左侧一般是标签,右边一般是采集用户输入的

 

五.组合垂直和水平布局

图中备注为label形式

下面的文本框为line Edit形式

Ctrl+方向键 微调

 

六.绝对布局

 

七.分割线与间隙

属性在goemotry中查看

  1. spacer 添加加空隙

水平的话,先调整为水平布局,将Horizontal spacer拖入水平布局内——》选中间隙,——》spacer中选中sizeType中的Fixed ——》可以设置宽度,垂直的可以设置高度

 

 

   2. 添加间隔线

在Displace Widgets中的 Vertiacl Line与Horizontal Line

     

八.控件尺寸的最大值与最小值

minimumsize最小

maximumsize 最大  设置一个控件最大最小的尺寸

 

 

九.尺寸策略(sizePolicy)

SizeHint(期望尺寸)

默认尺寸,对于大多数控件来说,SizeHint不可修改,只读。

读取SizeHint的方法如图:

 

举例:设置如下界面

首先选择一个水平布局——》然后在水平布局左侧添加一个Tree View(Item Views中) ,右侧加一个frame面板(Containers中),——>然后设置为1:1:2的水平比例,——》然后在右侧加入表单布局,form layout,再往form layout中拖动label与line text

十.伙伴关系

两个控件的关联关系

菜单显示时按热键才起作用,相当于另外一种快捷键。

效果:

当键盘输入ait+a 时光标显示在姓名后的文本框,不区分大小写

alt+b光标定位在身份证后

代码也可以实现两个控件的伙伴关系(以后讲)

 

十一.Tab顺序

按Tab键之后,光标在输入框中的跳转顺序

方法一:右键

方法二:直接点框内数字

 

 

十二.信号和槽

信号(signal)与槽(slot)是qt的核心机制,也是Pyqt的核心机制。

信号:是由对象或控件发射出去的消息

按钮的单击事件:当单击按钮时,按钮就会向外部发送单击的消息,这些发送出去的信号需要一些代码来拦截,这些代码就槽。

槽:本质上是一个函数或方法,信号可以理解为事件函数

需要将信号与槽绑定,一个信号可以和多个槽绑定,一个槽可以拦截多个信号

例1:功能:实现点击按钮,关闭窗口

(1)先创建一个按钮,再设置信号/槽

注:

可恢复窗口,即重新编辑(删除控件等操作)

 

例2:功能:实现输入框的显示与隐藏,以及文本输入框的可用与不可用

效果如下图:

1.首先设置隐藏于显示这两个控件

(1)设计出界面:复选框和文本输入框

(2)修改复选框默认为选中状态

,即默认为

(3)设计信号/槽关系

2.设置这两个控件

(1)设计出界面:复选框和文本输入框

(2)将文本框默认设置为不可用

,即文本输入框显示为灰色

(3)设计信号/槽关系

 

最终效果如下:

 

单击(clicked)事件与close方法想关联。

 

 

十三 . 添加菜单栏与工具栏

如何创建菜单栏与工具栏,并且往菜单栏和工具栏添加菜单和按钮

1.状态栏

主窗口最下面的状态栏,默认是有的

2.菜单栏

点击菜单栏——》右键移除

3,工具栏

(1)添加工具栏——》右键

(2)打开动作编辑器,选中要放入工具栏的动作,从动作编辑器中拖至工具栏。

效果

 

 

十四.使用python代码编写

主窗口的类型:有三种窗口

QMainWindow:可以包含菜单栏、工具栏和标题栏,是最常见的窗口形式

QDialog:是对话窗口的基类。没有菜单栏、工具栏和标题栏

QWidget:不确定窗口的用途,就使用QWidget。

我们一般会使用QMainWindow,在QMainWindow里面使用QDialog,偶尔使用QWidget。

效果:

代码:

'''
面向对象的方式,将所有与ui有关的代码都放进一个类里面,
然后创建一个窗口,只要创建这个类的子类即可
'''
import sys
from  import QApplication , QMainWindow
from  import QIcon

class FirstMainWin(QMainWindow):
    def __init__(self,parent=None):
        super(FirstMainWin,self).__init__(parent)

        #设置主窗口的标题
        ("第一个主窗口应用")

        #设置窗口的尺寸
        (400,300)
         = ()
        ('只存在5秒的消息',5000)
        
if __name__ == '__main__':
    app = QApplication()
    #(QIcon('E:/PycharmProjects/doutula/pyqt5_/controls/images/'))
    (QIcon('./images/'))
    main = FirstMainWin()
    ()
    (app.exec_())



 

十五.让主窗口居中显示

窗口默认也为居中,因此我认为此节不是很重,但是还是记录一下方法。

#得这整个屏幕的尺寸,和整个窗口的尺寸,然后用整个屏幕的尺寸减去整个窗口的尺寸
import sys
from  import QApplication, QMainWindow,QDesktopWidget
from  import QIcon


class CenterForm(QMainWindow):
    def __init__(self, parent=None):
        super(CenterForm, self).__init__(parent)

        # 设置主窗口的标题
        ("让窗口居中")

        # 设置窗口的尺寸
        (400, 300)
        print("初始化")
    def center(self):
        #获取屏幕坐标系
        screen = QDesktopWidget().screenGeometry()
        #获取窗口坐标系
        size = ()
        newLeft = (()-())/2
        newTop = (() - ()) / 2
        #调用move的方法来移动窗口
        (newLeft,newTop)
        print("移动窗口")

if __name__ == '__main__':
    app = QApplication()
    c = CenterForm()
    #main = (c)  #不调用此函数,窗口依然可以居中
    ()
    (app.exec_())



 

十六.点击按钮退出应用程序

import sys
from  import QPushButton,QHBoxLayout,QWidget,QApplication, QMainWindow,QDesktopWidget
from  import QIcon
class QuitApplication(QMainWindow):
    #点击按钮,退出应用程序
    def __init__(self):
        super(QuitApplication, self).__init__()
        (300,120)
        ("退出应用程序")

        #添加Button
        self.button1 = QPushButton("退出程序")
        #将button与槽绑定
        self.(self.onClick_Button)

        #创建水平布局
        layout = QHBoxLayout()
        (self.button1)  #把button1放在水平布局是哪个

        #把水平布局放在主框架上
        mainFrame = QWidget()  #让充满屏幕
        (layout)
        (mainFrame) #让主框架放在整个窗口上

    #按钮单击事件的方法(自定义的槽)
    def onClick_Button(self):
        sender = ()  #通过sender获得button
        print(()+ "  按钮被按下")  #()是读取按钮上的内容
        app = ()  #得到一个实例
        #退出应用程序
        ()

if  __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = QuitApplication()
    ()
    (app.exec_())

点击按钮后,窗口关闭,并且命令行显示

 

十七.屏幕坐标系

屏幕左上角坐标是(0,0)

工作区高度:窗口高度(不包括标签栏)

标签栏高度:标签栏坐标减去工作区坐标

(300,240) 设置的是工作区的尺寸

 注意区分三者坐标的不同,详解见代码注释。

import sys
from  import QPushButton,QHBoxLayout,QWidget,QApplication, QMainWindow,QDesktopWidget
from  import QIcon
#此例子中使用面向过程的方式,不使用类了
def onClick_Button():
    print("含边框的坐标")
    print("()= %d" % ())        #含有边框的坐标    250(窗口横坐标)
    print("()= %d" % ())        #200(窗口纵坐标)
    print("()= %d" % ()) #300(工作区宽度)
    print("() = %d" % ())#240(工作区高度)

    print("工作区的坐标")
    print("().x()= %d" % ().x()) #工作区的坐标系,不包含标题栏 251(工作区横坐标)
    print("().y()= %d" % ().y())          #231(工作区纵坐标)
    print("().width()= %d" % ().width())  #300(工作区宽度)
    print("().height() = %d" % ().height())#240(工作区高度)

    print("框架的坐标")
    print("().x()= %d" % ().x())    #250(窗口横坐标)
    print("().y()= %d" % ().y())    #200(窗口纵坐标)
    print("().width()= %d" % ().width()) #302(窗口宽度)
    print("().height() = %d" % ().height()) #272(窗口高度 =标题栏高度+工作区高度)
app = QApplication()
widget = QWidget()
btn = QPushButton(widget)
("按钮")
(onClick_Button)
(24,52)
(300,240)  #设置工作区的尺寸
(250,200)
("屏幕坐标系")
()
(app.exec_())


点击按钮后输出:

 

十八.设置窗口和应用程序图标

窗口的setWindowIcon方法用于设置主窗口的图标和应用程序图标,只在Windows可用
QApplication中的setWindowIcon方法也用于设置主窗口的图标和应用程序图标,
但调用了窗口的setWindowIcon方法,QApplication中的setWindowIcon方法就不起作用了
(与老师讲的有些出入,但是还是以运行结果为准)
import sys
from  import QApplication, QMainWindow
from  import QIcon
'''
窗口的setWindowIcon方法用于设置主窗口的图标和应用程序图标,只在Windows可用
QApplication中的setWindowIcon方法也用于设置主窗口的图标和应用程序图标,
但调用了窗口的setWindowIcon方法,QApplication中的setWindowIcon方法就不起作用了
'''

class IconForm(QMainWindow):
    def __init__(self):
        super(IconForm, self).__init__()
        ()

    def initUI(self):
        (300,300,250,250)
        # 设置主窗口的标题
        ("设置窗口图标")
        #设置窗口图标
        (QIcon('./images/'))

if __name__ == '__main__':
    app = QApplication()
    (QIcon('E:/PycharmProjects/doutula/pyqt5_/controls/images/'))
    main = IconForm()
    ()
    (app.exec_())

 运行结果:

 

 

十九.为控件添加提示消息

鼠标放在工作区就会出现提醒信息

#为控件添加提示信息
import sys
from  import QHBoxLayout,QWidget,QToolTip,QPushButton,QApplication, QMainWindow
from  import QIcon
from  import QFont


class TooltipForm(QMainWindow):
    def __init__(self):
        super().__init__()
        ()

    def initUI(self):
        (QFont("SanSerif",12))#设置字体与大小
        ("今天是<b>星期五</b>") #设置提示信息为粗体
        (300,300,400,300)
        ("设置控件提示消息")


if __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = TooltipForm()
    ()
    (app.exec_())

效果: 

#为控件添加提示信息
import sys
from  import QHBoxLayout,QWidget,QToolTip,QPushButton,QApplication, QMainWindow
from  import QIcon
from  import QFont


class TooltipForm(QMainWindow):
    def __init__(self):
        super().__init__()
        ()

    def initUI(self):
        (QFont("SanSerif",12))#设置字体与大小
        ("今天是<b>星期五</b>") #设置提示信息为粗体
        (300,300,400,300)
        ("设置控件提示消息")
        # 添加Button
        self.button1 = QPushButton("我的按钮")
        self.("这是一个按钮")

        # 创建水平布局
        layout = QHBoxLayout()
        (self.button1)  # 把button1放在水平布局是哪个

        # 把水平布局放在主框架上
        mainFrame = QWidget()  # 让充满屏幕
        (layout)
        (mainFrame)  # 让主框架放在整个窗口上

if __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = TooltipForm()
    ()
    (app.exec_())

效果: 

 

二十.QLabel控件的基本用法

setAlignment():设置文本的对齐方式

setIndent(): 设置文本缩进

text(): 获取文本内容

setBuddy(): 设置伙伴关系

setText():设置文本内容

selectText():返回所选择的字符

setWordWrap():设置是否允许换行

'''
setAlignment():设置文本的对齐方式
setIndent(): 设置文本缩进
text(): 获取文本内容
setBuddy(): 设置伙伴关系
setText():设置文本内容
selectText():返回所选择的字符
setWordWrap():设置是否允许换行
QLabel常用的信号(事件):
1.当鼠标滑过QLabel控件时触发:linkHovered
2.当鼠标单击QLabel控件时触发:linkActivated
'''
import sys
from  import QLabel,QVBoxLayout,QWidget,QToolTip,QPushButton,QApplication, QMainWindow
from  import QIcon
from  import QPalette,QPixmap
from  import Qt
class QLabelDemo(QWidget):
    def __init__(self):
        super().__init__()
        ()

    def initUI(self):
        #创建label
        label1 = QLabel(self)
        label2 = QLabel(self)
        label3 = QLabel(self)
        label4 = QLabel(self)

        ("<font color = yellow>这是一个文本标签(label1).</font>")
        (True)  #背景自动填充
        palette = QPalette()  #填充
        (,) #设置label背景颜色
        (palette) #调试板
        ()  #设置文字的对齐方式,文本居中对齐

        ("<a href= '#'>欢迎使用Python (label2)</a>")
        ()
        ("这是一个图片标签(label2)")
        (QPixmap("./images/"))
        #label4,要么触发单击事件,要么链接,只能二者选其一
        #如果设为True用浏览器打开网页,如果设为False,调用槽函数
        (True)
        ("<a href= '/'> 感谢使用百度(label4) </a>")
        ()
        ("这是一个超级链接")

        #垂直布局
        vbox = QVBoxLayout()
        (label1)
        (label2)
        (label3)
        (label4)

        #将linkHovered信号绑定到槽函数上
        ()  #滑过事件

        () #单击事件
        (vbox)  #设置布局
        ("QLabel控件演示")

    def linkHovered(self):
        print("当鼠标滑过label2标签时,触发条件")
    def linkClicked(self):
        print("当鼠标滑过label4标签时,触发条件")


if  __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = QLabelDemo()
    ()
    (app.exec_())

效果: 

 

二十一. QLabel与伙伴控件

热键:ALT+()

(控件名,控件位置行索引,控件位置行索引,控件占几行,控件占几列)

#栅格布局
mainLayout = QGridLayout(self)
(nameLabel,0,0)  #(0,0)表示放在一行一列
(nameLineEdit,0,1,1,2)#(0,1,1,2)表示放在第一行的第二列,占1行两列
(passwordLabel,1,0) #(1,0)表示第二行第一列
(passwordLineEdit,1,1,1,2)  #(1,1,1,2)表示在第二行的第二列,占一行两列
'''
QLabel与伙伴控件
(控件名,控件位置行索引,控件位置行索引,控件占几行,控件占几列)
'''
from  import *
import sys
from  import QIcon
class QLabelBuddy(QDialog) :
    def __init__(self):
        super().__init__()
        ()
    def initUI(self):
        ("QLabel与伙伴控件")
        #创建两个控件
        nameLabel = QLabel('&Name',self)
        nameLineEdit = QLineEdit(self)
        #设置伙伴控件
        (nameLineEdit)

        #输入密码
        passwordLabel = QLabel('&Password', self)
        passwordLineEdit = QLineEdit(self)
        # 设置伙伴控件
        (passwordLineEdit)
        #创建按钮
        btnOK = QPushButton("&OK")
        btnCancel = QPushButton("&Cancel")

        #栅格布局
        mainLayout = QGridLayout(self)
        (nameLabel,0,0)  #(0,0)表示放在一行一列
        (nameLineEdit,0,1,1,2)#(0,1,1,2)表示放在第一行的第二列,占1行两列
        (passwordLabel,1,0) #(1,0)表示第二行第一列
        (passwordLineEdit,1,1,1,2)  #(1,1,1,2)表示在第二行的第二列,占一行两列

        (btnOK,2,1)
        (btnCancel,2,2)

if  __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = QLabelBuddy()
    ()
    (app.exec_())
#ALT+N,ALT+P

效果:alt+p,alt+n上下跳转 

 

二十二.限制QLineEdit控件的输入

限制QLineEdit控件的输入(校验器)
如限制只能输入整数,浮点数或满足一定条件的字符串
'''
限制QLineEdit控件的输入(校验器)
如现在只能输入整数,浮点数或满足一定条件的字符串

'''
from  import QIcon
from  import *
from  import QIntValidator,QDoubleValidator,QRegExpValidator
from  import QRegExp
import  sys
class QLineEditValidator(QWidget):
    def __init__(self):
        super(QLineEditValidator,self).__init__()
        ("校验器")
        ()
    def initUI(self):
        #创建表单布局
        formLayout = QFormLayout()

        intLineEdit = QLineEdit()
        doubleLineEdit = QLineEdit()
        validatorLineEdit = QLineEdit()

        ("整数类型",intLineEdit)
        ("浮点类型",doubleLineEdit)
        ("数字和字母",validatorLineEdit)

        ("整型")
        ("浮点型")
        ("数字和字母")

        #整型校验器[1,99]
        intValidator = QIntValidator(self)
        (1,99)

        #浮点校验器[-360,360],精度:小数点后两位
        doubleValidator = QDoubleValidator(self)
        (-360,360)
        ()
        #设置精度,小数点2位
        (2)

        #字符和数字 ,正则
        reg = QRegExp('[a-zA-Z0-9]+$')
        validator = QRegExpValidator(self)
        (reg)

        #设置校验器
        (intValidator)
        (doubleValidator)
        (validator)

        (formLayout)

if __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = QLineEditValidator()
    ()
    (app.exec_())

 

二十三.QLineEdit综合案例

'''
QLineEdit综合案例
'''
from  import QIcon
from  import *
from  import *
from  import Qt
import sys

class QLineEditDemo(QWidget):
    def __init__(self):
        super(QLineEditDemo, self).__init__()
        ()
    def initUI(self):
        edit1 = QLineEdit()
        #使用int校验器
        (QIntValidator())
        (4) #不超过9999
        ()
        (QFont("Arial",20))

        #浮点数的校验器
        edit2 = QLineEdit()
        (QDoubleValidator(0.99,99.99,2))

        #掩码
        edit3 = QLineEdit()
        ('99_9999_999999;#')

        #绑定信号和槽(文本变化时,触发事件)
        edit4 = QLineEdit()
        ()

        edit5 = QLineEdit()
        ()
        ()
        #设置为只读
        edit6 = QLineEdit("Hello PyQt5")
        (True)

        formLayout = QFormLayout()
        ("整数校验",edit1)
        ("浮点数校验", edit2)
        ("Input Mask", edit3)
        ("文本变化", edit4)
        ("密码", edit5)
        ("只读", edit6)
        (formLayout)
        ("QLineEdit综合案例")


    def textChanged(self,text):
        print('输入的内容:'+ text)
    def enterPress(self):
        print("已输入值")
if __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = QLineEditDemo()
    ()
    (app.exec_())

效果:

 

 

二十四.QTextEdit控制输入多行文本

'''
QTextEdit控件
'''
from  import QIcon
from  import *
from  import QIntValidator,QDoubleValidator,QRegExpValidator
from  import QRegExp
import  sys
class QTextEditDemo(QWidget):
    def __init__(self):
        super(QTextEditDemo,self).__init__()
        ()
    def initUI(self):
        ("QTextEdit控件演示")
        (300,320)
         = QTextEdit()
         = QPushButton("显示文本")
         = QPushButton("显示HTML")

         = QPushButton("获取文本")
         = QPushButton("获取HTML")

        layout = QVBoxLayout()
        ()
        ()
        ()

        ()
        ()
        (layout)
        (self.onClick_ButtonToText)
        (self.onClick_ButtonToHTML)

        (self.onClick_ButtonText)
        (self.onClick_ButtonHTML)
    def onClick_ButtonText(self):
        ("Hello World")
    def onClick_ButtonHTML(self):
        ('<font color= "blue" size ="5">Hello World!!!           How are you?</font>')
    def onClick_ButtonToText(self):
        print(())
    def onClick_ButtonToHTML(self):
        print(())
if __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = QTextEditDemo()
    ()
    (app.exec_())

 

二十五. 按钮控件

ctrl+鼠标左键选中——》查看该方法的源码

'''
按钮控件(QPushButton)
QAstractButton

QPushButton
AToolButton
QRadioButton
QCheckBox
'''
import sys

from  import QIcon
from  import *
from  import *
from  import *
class QPushButtonDemo(QDialog):#对话框
    def __init__(self):
        super(QPushButtonDemo,self).__init__()
        ()
    def initUI(self):
        ("QPushButton Demo")
        #垂直布局
        layout = QVBoxLayout()
        self.button1 = QPushButton("第一个按钮")
        self.("First Button1")
        self.(True)
        self.()#设置开关,第一次选中
        #让你传两个参数,lambda表达式,硬编码(直接调用whichButton方法)
        self.(lambda:(self.button1))
        self.()
        (self.button1)

        #在文本前面显示图像
        self.button2 = QPushButton("图像按钮")
        self.(QIcon(QPixmap("./images/")))
        self.(lambda :(self.button2))
        (self.button2)

        #设置按钮不可用
        self.button3 = QPushButton("不可用的按钮")
        self.(False)
        (self.button3)

        self.button4 = QPushButton('&MyButton')
        self.(True)
        self.(lambda :(self.button4))
        (self.button4)
        (layout)
        (400,300)
    def whichButton(self,btn):
        print('被单击的按钮是<' + ()+ '>')
    def buttonState(self):
        if self.():
            print("按钮1已经被选中")
        else:
            print("按钮1未被选中")

if __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = QPushButtonDemo()
    ()
    (app.exec_())



 

二十六.使用QDialog显示通用对话框

'''
使用 QDialog显示通用对话框
基类 QDialog,在此基础上有扩展了4个
QMessageBox 消息对话框
QColorDialog 颜色对话框
QFontDialog 字体对话框
QInputDialog 获取用户输入信息的对话框
窗口
QMainWindow
QWidget
QDialog  没有菜单
'''
#主窗口中点击按钮显示对话框
import sys

from  import QIcon
from  import *
from  import *
from  import *
class QDialogDemo(QMainWindow):
    def __init__(self):
        super(QDialogDemo,self).__init__()
        ()
    def initUI(self):
        ("QDialog案例")
        (300,200)
        #常见button
          =  QPushButton(self)
        ("弹出对话框")
        (50,50)
        ()
    def showDialog(self):
        dialog = QDialog()
        button =  QPushButton("确定",dialog)
        ()
        (50,50)
        ("对话框")
        () #设置模式

        ()  #显示对话框


if __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = QDialogDemo()
    ()
    (app.exec_())

效果:

 

二十七.显示不同类型的消息对话框

'''
显示不同类型的消息对话框
消息对话框:QMessageBox
1.关于对话框
2.错误对话框
3,警告对话框
4.提问对话框
5.消息对话框

有两点差异
1.显示的对话框图标可能不同
2.显示的按钮是不一样的
'''
import sys
from  import QIcon
from  import *
from  import *
from  import *
class QMessageBoxDemo(QWidget):
    def __init__(self):
        super(QMessageBoxDemo,self).__init__()
        ()

    def initUI(self):
        ("QMessageBox 案例")
        (300,400)
        #垂直布局
        layout = QVBoxLayout()
        self.button1 = QPushButton()
        self.("显示对话框")
        self.()

        layout = QVBoxLayout()
        #关于对话框
        self.button1 = QPushButton()
        self.("显示关于对话框")
        self.()
        #显示消息对话框
        self.button2 = QPushButton()
        self.("显示消息对话框")
        self.() #所有都绑定到一个槽上
        #显示警告对话框
        self.button3 = QPushButton()
        self.("显示警告对话框")
        self.()
        #显示错误对话框
        self.button4 = QPushButton()
        self.("显示错误对话框")
        self.()  # 所有都
        #显示提问对话框
        self.button5 = QPushButton()
        self.("显示提问对话框")
        self.()  # 所有都

        (self.button1)
        (self.button2)
        (self.button3)
        (self.button4)
        (self.button5)
        (layout)
    def showDialog(self):
        text = ().text()
        if text == "显示关于对话框":
            (self,"关于","这是一个关于对话框")
        elif text =="显示消息对话框":
            reply = (self,"消息","这是一个消息对话框",|,)
            print(reply == )
        elif text =="显示警告对话框":
            (self,"警告","这是一个警告对话框",|,)
        elif text == "显示错误对话框":
            (self, "错误", "这是一个错误对话框",  | , )
        elif text =="显示提问对话框":
            (self,"提问","这是一个提问对话框",|,)


if __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = QMessageBoxDemo()
    ()
    (app.exec_())

 

二十八.显示不同类型的消息对话框

'''
输入对话框 :QInputDialog
用来显示输入列表

 与计数器控件有关

'''
import sys
from  import QIcon
from  import *
from  import *
from  import *
class QInputDialogDemo(QWidget):
    def __init__(self):
        super(QInputDialogDemo,self).__init__()
        ()
    def initUI(self):
        ("输入对话框")
        #创建表单布局
        layout = QFormLayout()
        self.button1 = QPushButton("获取列表中的选项")
        self.()
        self.lineEdit1 = QLineEdit()
        (self.button1,self.lineEdit1)

        self.button2 = QPushButton("获取字符串")
        self.()
        self.lineEdit2 = QLineEdit()
        (self.button2, self.lineEdit2)

        self.button3 = QPushButton("获取整数")
        self.()
        self.lineEdit3 = QLineEdit()
        (self.button3, self.lineEdit3)

        (layout)

    def getItem(self):
        items = ("C","C++","Python","Java","Rudy")
        item,ok = (self,"请选择编程语言","语言列表",items)
        if ok and item:
            self.(item)
    def getText(self):
        text, ok = (self, "文本输入框", "输入姓名")
        if ok and text:
            self.(text)
    def getInt(self):
        num,ok = (self,"整数输入框","输入数字")
        if ok and num:
            self.(str(num))



if __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = QInputDialogDemo()
    ()
    (app.exec_())

效果: 

 

二十九.文件对话框

'''
文件对话框:QFileDialog

'''
import sys
from  import QIcon
from  import *
from  import *
from  import *
class QFileDialogDemo(QWidget):
    def __init__(self):
        super(QFileDialogDemo,self).__init__()
        ()
    def initUI(self):
        #垂直布局
        layout = QVBoxLayout()
        self.button1 = QPushButton("加载图片")
        self.()
        (self.button1)

         = QLabel()
        ()

        self.button2 = QPushButton("加载文本文件")
        self.()
        (self.button2)

         = QTextEdit()
        ()
        (layout)
        ("文件对话框演示")

    def loadImage(self):
        # 选择单个文件
        fname, _ = (self, "打开文件", ".", "图像文件(*.jpg *.png)")
        (QPixmap(fname))


    def loadText(self):
        dialog = QFileDialog()
        ()
        ()
        if ():
            filenames = ()
            f= open(filenames[0],encoding='utf-8',mode="r")
            with f:
                data = ()
                (data)


if __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = QFileDialogDemo()
    ()
    (app.exec_())

效果:

 

三十.选项卡控件

'''
选项卡控件:QTabWidget

'''
import sys
from  import QIcon
from  import *
from  import *
from  import *
class TabWidgetDemo(QTabWidget):
    def __init__(self,parent=None):
        super(TabWidgetDemo,self).__init__(parent)
        ("选项卡控件:QTabWidget")
        #创建用于显示控件的窗口
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.tab3 = QWidget()

        (self.tab1,"选项卡1")
        (self.tab2, "选项卡2")
        (self.tab3, "选项卡3")
        self.tab1UI()
        self.tab2UI()
        self.tab3UI()
    def tab1UI(self):
        #表单布局
        layout = QFormLayout()
        ("姓名",QLineEdit())
        ("地址", QLineEdit())
        (0,"联系方式")
        self.(layout)

    def tab2UI(self):
        #水平布局
        layout = QFormLayout()
        sex = QHBoxLayout()
        (QRadioButton("男"))
        (QRadioButton("女"))
        (QLabel("性别"),sex)
        ("生日",QLineEdit())
        (1,"个人详细信息")
        self.(layout)

    def tab3UI(self):
        #水平布局
        layout = QHBoxLayout()
        (QLabel("科目"))
        (QCheckBox("物理"))
        (QCheckBox("高数"))
        (2, "教育程度")
        self.(layout)

if __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = TabWidgetDemo()
    ()
    (app.exec_())

效果: 

 

三十一.堆栈窗口控件

'''
堆栈窗口控件(QStackeWidget)

'''
import sys
from  import QIcon
from  import *
from  import *
from  import *
class QStackeWidgetDemo(QWidget):
    def __init__(self):
        super(QStackeWidgetDemo,self).__init__()
        (300,50,10,10)
        ("堆栈窗口控件:QStackeWidget")

         = QListWidget()
        (0,"联系方式")
        (1, "个人信息")
        (2, "教育程度")

        #三个页面
        self.stack1 = QWidget()  #对于一个页面的窗口
        self.stack2 = QWidget()
        self.stack3 = QWidget()

        self.tab1UI()  #通过这三个方法,给每一页添加控件
        self.tab2UI()
        self.tab3UI()
         = QStackedWidget()
        (self.stack1)  #添加至堆栈中
        (self.stack2)
        (self.stack3)

        hbox = QHBoxLayout()
        ()
        ()
        (hbox)
        ()
    #通过这个函数来切换索引
    def display(self,index):
        (index)


    def tab1UI(self):
        #表单布局
        layout = QFormLayout()
        ("姓名",QLineEdit())
        ("地址", QLineEdit())
        self.(layout)

    def tab2UI(self):
        #水平布局
        layout = QFormLayout()
        sex = QHBoxLayout()
        (QRadioButton("男"))
        (QRadioButton("女"))
        (QLabel("性别"),sex)
        ("生日",QLineEdit())
        self.(layout)

    def tab3UI(self):
        #水平布局
        layout = QHBoxLayout()
        (QLabel("科目"))
        (QCheckBox("物理"))
        (QCheckBox("高数"))
        self.(layout)

if __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = QStackeWidgetDemo()
    ()
    (app.exec_())

效果: 

 

 三十二.停靠控件

'''
停靠部件QDockWidget

'''
import sys
from  import QIcon
from  import *
from  import *
from  import *
class DockDemo(QMainWindow):
    def __init__(self,parent=None):
        super(DockDemo,self).__init__(parent)
        ("停靠控件:QDockWidget")

        layout = QHBoxLayout()
         = QDockWidget("Dockable",self)
         = QListWidget()
        ("item1")
        ("item2")
        ("item3")

        ()
        (QLineEdit())
        (True)
        (,)


if __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = DockDemo()
    ()
    (app.exec_())

效果:

 

三十三.容纳多文档的窗口

'''
容纳多文档的窗口
容纳多文档的 QMdiArea
多文档子窗口类 QMdiSubWindow
将QMdiSubWindow添加至QMdiArea中
'''
import sys
from  import QIcon
from  import *
from  import *
from  import *
class MultiDemo(QMainWindow):
    count = 0
    def __init__(self,parent=None):
        super(MultiDemo,self).__init__(parent)
        ("容纳多文档的窗口")
        #层叠,平铺
         = QMdiArea()
        ()

        bar = ()
        file = ("File")
        ("New")  #新创建窗口
        ("cascade")  #显示方式,层叠
        ("Tiled")#显示方式,平铺
        ()

    def windowaction(self,q):
        print(())
        if () == "New":
             =  +1
            sub = QMdiSubWindow()
            (QTextEdit())
            ("子窗口"+str())
            (sub)
            ()
        elif () =="cascade":
            ()
        elif () =="Tiled":
            ()


if __name__ == '__main__':
    app = QApplication()
    (QIcon('./images/'))
    main = MultiDemo()
    ()
    (app.exec_())

效果: