zoukankan      html  css  js  c++  java
  • pyqt5学习示例

    python代码编写pyqt5

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

    # 相关函数方法
    setWindowTitle()   # 设置主窗口的标题
    resize()   # 设置窗口的大小
    statusBar()  # 创建状态栏
    showMessage('信息',过期时间/秒)  # 状态栏展示的信息
    setWindowIcon(QIcon(图标))  # 设置窗口图标
    QDesktopWidget().screenGeometry()  # 获取屏幕的坐标系
    geometry()  # 获取窗口坐标系
    move()   # 移动窗口
    QPushButton()  # 创建按钮
    QPushButton().clicked.connect(self.onClick_Button)  # 将按钮与槽(自定义函数)绑定,点击按钮触发事件执行函数
    QHBoxLayout()  # 创建水平布局
    QVBoxLayout()  # 创建垂直布局
    mainLayout = QGridLayout()  # 创建栅格布局
    mainLayout.addWidget(控件名,控件位置行索引,控件位置行索引,控件占几行,控件占几列)
    setBuddy()  # 设置伙伴控件
    QHBoxLayout().addWidget()  # 添加组件到水平布局中
    QWidget()  # 子窗口, 
    QWidget().setLayout(布局)  # 将某种布局放到屏幕上
    setCentralWidget(屏幕)  # 让屏幕及框架放到窗口上
    sender = self.sender()  # 可以获取到button
    sender.text()  # 获取到按钮上的内容
    app = QApplication.instance()  # 得到一个实例
    app.quit()   # 退出应用程序
    setFont(QFont('字体', 大小))  # 设置字体和大小
    setToolTip()  # 设置悬浮提示信息
    setGeometry(左右, 上下, 宽, 高)   #第一个参数	是用户区域参照与屏幕左上角坐标原点的x坐标和y坐标,后面两个参数分别是用户区域的宽和高
    # QLabel控件的基本用法
    QLabel()  # 创建label
    setAlignment(Qt.AlignCenter):设置文本的对齐方式,文本居中对齐
    setPixmap(QPixmap("./images/4.jpg")) #用于在标签或按钮上显示图像,类型又BMP,GIF,JPG等
    setOpenExternalLinks(True)  #要么触发单击事件,要么链接,只能二者选其一,如果设为True用浏览器打开网页,如果设为False,调用槽函数
    setAutoFillBackground(True)  #背景自动填充
    palette = QPalette()  #填充
    palette.setColor(QPalette.Window,Qt.blue) #设置label背景颜色
    setPalette()  # 调试板
    setIndent(): #设置文本缩进
    text(): #获取文本内容
    setBuddy(): #设置伙伴关系
    setText(): #设置文本内容
    selectText(): #返回所选择的字符
    setWordWrap(): #设置是否允许换行
    linkHovered  #当鼠标滑过QLabel控件时触发
    linkActivated # 当鼠标单击QLabel控件时触发
    
    QMainWindow:可以包含菜单栏、工具栏和标题栏,是最常见的窗口形式
    QDialog:是对话窗口的基类,没有菜单栏、工具栏和标题栏
    QWidget:不确定窗口的用途,就是用QWidget.
    我们一般会使用QMainWindow,在QMainWindow里面使用QDialog,偶尔使用QWidget
    
    # 屏幕坐标
    屏幕左上角坐标是(0,0)
    工作区高度:窗口高度(不包含标签栏)
    标签栏高度:标签栏坐标减去工作区坐标
    widget.resize()  # 设置的是工作区的尺寸
    
    import sys
    from PyQt5.QtWidgets import QApplication, QMainWindow
    from PyQt5.QtGui import QIcon
    
    class FirstMainWin(QMainWindow):
        def __init__(self, parent=None):
            super().__init__(parent)
            
            # 设置主窗口的标题
            self.setWindowTitle('第一个窗口标题')
            
            # 设置窗口的尺寸
            self.resize(400, 300)
            self.status = self.statusBar()
            self.status.showMessage('只存在5秒的消息', 5000)
            
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        app.setWindowIcon(QIcon('./images/1.ico'))
        main = FirstMainWin()
        main.show()
        sys.exit(app.exec_())
    

    使用QDialog显示通用对话框

    import sys
    from PyQt5.QtGui import QIcon
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    
    
    class QDialogDemo(QMainWindow):
        def __init__(self):
            super().__init__()
            self.initUI()
    
        def showDialog(self):
            # 创建对话框
            dialog = QDialog()
            button = QPushButton('确定', dialog)
            button.clicked.connect(dialog.close)
            button.move(50, 50)
            dialog.setWindowTitle('对话框')
            # 设置模式
            dialog.setWindowModality(Qt.ApplicationModal)
            dialog.exec()  # 显示对话框
    
        def initUI(self):
            self.setWindowTitle('QDialog案例')
            self.resize(300, 200)
            # 创建按钮
            self.button = QPushButton(self)
            self.button.setText('弹出对话框')
            self.button.move(50, 50)
            self.button.clicked.connect(self.showDialog)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        app.setWindowIcon(QIcon('1.jpg'))
        main = QDialogDemo()
        main.show()
        sys.exit(app.exec_())
    

    显示不同类型的消息对话框 QMessageBox

    import sys
    
    from PyQt5.QtGui import QIcon
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    
    
    class QMessageBoxDemo(QWidget):
        def __init__(self):
            super(QMessageBoxDemo, self).__init__()
            self.initUI()
    
        def initUI(self):
            self.setWindowTitle('MessageBox 案例')
            self.resize(300, 400)
            # 垂直布局
            layout = QVBoxLayout()
            # 创建按钮
            self.button1 = QPushButton()
            self.button1.setText('显示关于对话框')
            self.button1.clicked.connect(self.showDialog)
    
            self.button2 = QPushButton()
            self.button2.setText('显示消息对话框')
            self.button2.clicked.connect(self.showDialog)
    
            self.button3 = QPushButton()
            self.button3.setText('显示警告对话框')
            self.button3.clicked.connect(self.showDialog)
    
            self.button4 = QPushButton()
            self.button4.setText('显示错误对话框')
            self.button4.clicked.connect(self.showDialog)
    
            self.button5 = QPushButton()
            self.button5.setText('显示提问对话框')
            self.button5.clicked.connect(self.showDialog)
    
            # 将组件按钮添加到垂直布局中
            layout.addWidget(self.button1)
            layout.addWidget(self.button2)
            layout.addWidget(self.button3)
            layout.addWidget(self.button4)
            layout.addWidget(self.button5)
    
            # 将布局放到屏幕上
            self.setLayout(layout)
    
        def showDialog(self):
            # 获取按钮文本内容
            text = self.sender().text()
            if text == '显示关于对话框':
                # about弹出关于对话框
                QMessageBox.about(self, '关于', '这是一个关于对话框')
            elif text == '显示消息对话框':
                reply = QMessageBox.information(self, '消息', '这是一个消息对话框', QMessageBox.Yes|QMessageBox.No, QMessageBox.Yes)
                print(reply == QMessageBox.Yes)
            elif text == '显示警告对话框':
                QMessageBox.warning(self, '警告', '这是一个警告对话框', QMessageBox.Yes|QMessageBox.No, QMessageBox.Yes)
            elif text == '显示错误对话框':
                QMessageBox.critical(self, '错误', '这是一个错误对话框', QMessageBox.Yes|QMessageBox.No, QMessageBox.Yes)
            elif text == '显示提问对话框':
                QMessageBox.question(self, '提问', '这是一个提问对话框', QMessageBox.Yes|QMessageBox.No, QMessageBox.Yes)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        app.setWindowIcon(QIcon('1.jpg'))
        main = QMessageBoxDemo()
        main.show()
        sys.exit(app.exec_())
        
        
    <--------------------------------------->
    information(QWdiget parent,title,text,buttons,defaultButton) #弹出消息对话框
    question(QWidget parent,title,text,buttons,defaultButton)# 弹出问答对话框
    warning(QWidget parent,title,text,buttons,defaultButton)# 弹出警告对话框
    critical(QWidget parent,title,text,buttons,defaultButton) # 弹出错误对话框
    about(QWidget parent,title,text) # 弹出关于对话框
    # 参数
    QWdiget parent: 指定的父窗口控件
    title: 对话框标题
    text: 对话框文本
    button: 对个标准按钮,默认为Ok, QMessageBox.Yes | QMessage.No
    defaultButton: 默认选中的标准按钮,默认选中第一个标准按钮
    

    显示不同类型的消息对话框 QInputDialog

    import sys
    
    from PyQt5.QtGui import QIcon
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    
    
    class QInputDialogDemo(QWidget):
        def __init__(self):
            super(QInputDialogDemo, self).__init__()
            self.initUI()
    
        def initUI(self):
            # 设置窗口标题
            self.setWindowTitle('输入对话框')
            # 创建表单布局
            layout = QFormLayout()
            # 创建按钮
            self.button1 = QPushButton('获取列表中的选项')
            # 绑定槽
            self.button1.clicked.connect(self.getItem)
            # 创建输入框
            self.lineEdit1 = QLineEdit()
            # 将按钮和输入框添加到一行中
            layout.addRow(self.button1, self.lineEdit1)
    
            self.button2 = QPushButton('获取字符串')
            self.button2.clicked.connect(self.getText)
            self.lineEdit2 = QLineEdit()
            layout.addRow(self.button2, self.lineEdit2)
    
            self.button3 = QPushButton('获取整数')
            self.button3.clicked.connect(self.getInt)
            self.lineEdit3 = QLineEdit()
            layout.addRow(self.button3, self.lineEdit3)
    
            self.setLayout(layout)
    
        def getItem(self):
            items = ("C", "C++", "Python", "Java", "Rudy")
            # getItem获取列表里的选项输入
            item, ok = QInputDialog.getItem(self, '请选择编程语言', '语言列表', items)
            if ok and item:
                self.lineEdit1.setText(item)
    
        def getText(self):
            # getText获取标准字符串的输入
            text, ok = QInputDialog.getText(self, '文本输入框', '输入姓名')
            if ok and text:
                self.lineEdit2.setText(text)
    
        def getInt(self):
            # getInt获取整数的输入
            num, ok = QInputDialog.getInt(self, '整型输入框', '输入整数')
            if ok and num:
                self.lineEdit3.setText(str(num))
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        app.setWindowIcon(QIcon('1.jpg'))
        main = QInputDialogDemo()
        main.show()
        sys.exit(app.exec_())
    
    

    文件对话框 QFileDialog

    # 打开本地图片并展示到屏幕上
    # 选择本地文本文件,并将内容展示到屏幕上
    import sys
    
    from PyQt5.QtGui import QIcon
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    
    class QFileDialogDemo(QWidget):
        def __init__(self):
            super(QFileDialogDemo, self).__init__()
            self.initUI()
    
        def initUI(self):
            # 创建垂直布局
            layout = QVBoxLayout()
            # 创建按钮
            self.button1 = QPushButton('加载图片')
            # 绑定槽
            self.button1.clicked.connect(self.loadImage)
            # 将按钮添加到布局中
            layout.addWidget(self.button1)
    
            # 创建label
            self.imageLabel = QLabel()
            # 将label添加到布局中
            layout.addWidget(self.imageLabel)
    
            self.button2 = QPushButton('加载文本文件')
            self.button2.clicked.connect(self.loadText)
            layout.addWidget(self.button2)
    
            self.contents = QTextEdit()
            layout.addWidget(self.contents)
    
            # 将layout布局添加到屏幕上
            self.setLayout(layout)
            self.setWindowTitle('文件对话框演示')
    
        def loadImage(self):
            # 选择单个文件
            # getOpenFileName 返回用户所选择文件的名称,并打开该文件
            fname, _ = QFileDialog.getOpenFileName(self, '打开文件', '.', '图像文件(*.jpg *.png)')
            # 用于在标签上显示图片
            self.imageLabel.setPixmap(QPixmap(fname))
    
        def loadText(self):
            # 创建用于打开和保存文件的标准对话框
            dialog = QFileDialog()
            # 设置可以选择的文件类型,枚举常量是:
            # QFileDialog,AnyFile:任何文件
            # QFileDialog.ExistingFile: 已存在的文件
            # QFileDialog.Directory: 文件目录
            # QFileDialog.ExistingFiles: 已存在的多个文件
            dialog.setFileMode(QFileDialog.AnyFile)
            # 设置过滤器
            dialog.setFilter(QDir.Files)
            if dialog.exec_():
                # 接受选择文件的路径,默认为列表
                filenames = dialog.selectedFiles()
                # 列表中第一个元素即是文件路径,
                f = open(filenames[0], mode='r', encoding='utf-8')
                with f:
                    # 读取文本内容
                    data = f.read()
                    # 将读取到的内容添加到多行文本框中
                    self.contents.setText(data)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        app.setWindowIcon(QIcon('1.jpg'))
        main = QFileDialogDemo()
        main.show()
        sys.exit(app.exec_())
    

    选项卡控件 QTabWidget

    import sys
    
    from PyQt5.QtGui import QIcon
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    
    
    class TabWidgetDemo(QTabWidget):
        def __init__(self, parent=None):
            super(TabWidgetDemo, self).__init__(parent)
            self.setWindowTitle('选项卡控件:QTabWidget')
            # 创建用于显示控件的窗口
            self.tab1 = QWidget()
            self.tab2 = QWidget()
            self.tab3 = QWidget()
            self.addTab(self.tab1, '选项卡1')
            self.addTab(self.tab2, '选项卡2')
            self.addTab(self.tab3, '选项卡3')
    
            self.tab1UI()
            self.tab2UI()
            self.tab3UI()
    
        def tab1UI(self):
            # 创建布局
            layout = QFormLayout()
            layout.addRow('姓名', QLineEdit())
            layout.addRow('地址', QLineEdit())
            # 每个tab的内容,参数1表示索引下标,从0开始,参数2为文本内容
            self.setTabText(0, '联系方式')
            self.tab1.setLayout(layout)
    
        def tab2UI(self):
            # 创建表单布局
            layout = QFormLayout()
            # 创建水平布局
            sex = QHBoxLayout()
            sex.addWidget(QRadioButton('男'))
            sex.addWidget(QRadioButton('女'))
            layout.addRow(QLabel('性别'), sex)
            layout.addRow('生日', QLineEdit())
            self.setTabText(1, '个人详细信息')
            # 将表单布局添加到tab2的窗口上
            self.tab2.setLayout(layout)
    
        def tab3UI(self):
            # 创建水平布局
            layout = QHBoxLayout()
            layout.addWidget(QLabel('科目'))
            layout.addWidget(QCheckBox('物理'))
            layout.addWidget(QCheckBox('高数'))
            self.setTabText(2, '教育程度')
            self.tab3.setLayout(layout)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        app.setWindowIcon(QIcon('1.jpg'))
        main = TabWidgetDemo()
        main.show()
        sys.exit(app.exec_())
    

    堆栈窗口控件 QStackeWidget

    import sys
    
    from PyQt5.QtGui import QIcon
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    
    
    class QStackeWidgetDemo(QWidget):
        def __init__(self):
            super(QStackeWidgetDemo, self).__init__()
            self.setGeometry(300, 50, 10, 10)
            self.setWindowTitle('堆栈窗口控件:QStackeWidget')
            # 创建一个与QListView提供的列表视图类似的列表视图,具有用于添加和删除项目的接口,使用一个内部模型来管理列表中的每一个QListWidgetItem
            self.list = QListWidget()
            # 在指定是索引位置添加对象或字符串
            self.list.insertItem(0, '联系方式')
            self.list.insertItem(1, '个人信息')
            self.list.insertItem(2, '教育程度')
    
            # 三个页面
            self.stack1 = QWidget()
            self.stack2 = QWidget()
            self.stack3 = QWidget()
    
            self.tab1UI()
            self.tab2UI()
            self.tab3UI()
    
            # 创建堆栈窗口
            self.stack = QStackedWidget()
            # 将上面创建的三个子窗口添加到堆栈窗口中
            self.stack.addWidget(self.stack1)
            self.stack.addWidget(self.stack2)
            self.stack.addWidget(self.stack3)
    
            # 创建水平布局
            hbox = QHBoxLayout()
            # 将列表视图添加到水平布局中
            hbox.addWidget(self.list)
            # 将堆栈窗口添加到水平布局中
            hbox.addWidget(self.stack)
            # 将整个水平布局添加到当前屏幕上
            self.setLayout(hbox)
            # 改变列表行时触发的事件
            self.list.currentRowChanged.connect(self.display)
    
        def display(self, index):
            """通过这个函数来切换索引
            隐式的将索引传递过来
            """
            self.stack.setCurrentIndex(index)
    
        def tab1UI(self):
            # 表单布局
            layout = QFormLayout()
            layout.addRow('姓名', QLineEdit())
            layout.addRow('地址', QLineEdit())
            self.stack1.setLayout(layout)
    
        def tab2UI(self):
            # 水平布局
            layout = QFormLayout()
            hb_sex = QHBoxLayout()
            hb_sex.addWidget(QRadioButton('男'))
            hb_sex.addWidget(QRadioButton('女'))
            layout.addRow('性别', hb_sex)
            layout.addRow('生日', QLineEdit())
            self.stack2.setLayout(layout)
    
        def tab3UI(self):
            # 水平布局
            layout = QHBoxLayout()
            layout.addWidget(QLabel('科目'))
            layout.addWidget(QCheckBox('物理'))
            layout.addWidget(QCheckBox('高数'))
            self.stack3.setLayout(layout)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        app.setWindowIcon(QIcon('1.jpg'))
        main = QStackeWidgetDemo()
        main.show()
        sys.exit(app.exec_())
    
    

    停靠控件 QDockWidget

    import sys
    
    from PyQt5.QtGui import QIcon
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    
    
    class DockDemo(QMainWindow):
        def __init__(self):
            super(DockDemo, self).__init__()
            self.setWindowTitle('停靠控件: QDockWidget')
    
            # 水平布局
            layout = QHBoxLayout()
            # 创建QDockWidget窗口(标题, 自身窗口)
            self.items = QDockWidget('Dockable', self)
            # 创建列表视图
            self.listWidget = QListWidget()
            self.listWidget.addItem('item1')
            self.listWidget.addItem('item2')
            self.listWidget.addItem('item3')
            # 将列表视图添加到QDockWidget窗口
            self.items.setWidget(self.listWidget)
            # 将输入框设置为中央小控件
            self.setCentralWidget(QLineEdit())
            # 设置Dock窗口是否可以浮动,如果设置为True,则表示可以浮动
            self.items.setFloating(False)
            # 将窗口放置在中央小控件的右侧
            self.addDockWidget(Qt.RightDockWidgetArea, self.items)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        app.setWindowIcon(QIcon('1.jpg'))
        main = DockDemo()
        main.show()
        sys.exit(app.exec_())
    
    

    容纳多文档的窗口

    """
    容纳多文档的窗口
    容纳多文档的 QMdiArea
    多文档子窗口类 QMdiSubWindow
    将QMdiSubWindow添加至QMdiArea中
    """
    import sys
    
    from PyQt5.QtGui import QIcon
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    
    
    class MultiDemo(QMainWindow):
        count = 0
    
        def __init__(self, parent=None):
            super(MultiDemo, self).__init__(parent)
            # 设置窗口标题
            self.setWindowTitle('容纳多文档的窗口')
            # 层叠,平铺
            self.mdi = QMdiArea()
            # 将mdi设置为中央控件
            self.setCentralWidget(self.mdi)
    
            # 创建一个菜单栏
            bar = self.menuBar()
            # 添加菜单
            file = bar.addMenu('File')
            # 新建窗口
            file.addAction('New')
            # 显示方式,层叠
            file.addAction('cascade')
            # 显示方式,平铺
            file.addAction('Tiled')
            # 关联事件
            file.triggered.connect(self.windowaction)
    
        def windowaction(self, q):
            print(q)
            print(q.text())
            if q.text() == 'New':
                MultiDemo.count += 1
                # 实例化多文档界面对象
                sub = QMdiSubWindow()
                # 将文本编辑编辑组件添加到多文档界面中
                sub.setWidget(QTextEdit())
                # 设置当前窗口的标题
                sub.setWindowTitle("子窗口" + str(MultiDemo.count))
                # 将子窗口添加到Mdi区域
                self.mdi.addSubWindow(sub)
                # 子窗口显示
                sub.show()
            elif q.text() == "cascade":
                self.mdi.cascadeSubWindows()
            elif q.text() == "Tiled":
                self.mdi.tileSubWindows()
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        app.setWindowIcon(QIcon('./images/t10.ico'))
        main = MultiDemo()
        main.show()
        sys.exit(app.exec_())
    
    
    
    
    
    

    -------------------------------------------

    个性签名:代码过万,键盘敲烂!!!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

  • 相关阅读:
    背景样式、列表样式、变形样式、过渡动画
    边框样式、段落样式、背景样式
    属性选择符、字体样式和元素样式
    Targets选项下Other linker flags的设置
    OC金额转大写
    输入手机号码 和 金额有效性的判断
    iOS手势冲突问题
    解决iOS手势冲突问题
    iOS开发 字符串的转化 小技巧
    iOS开发添加pch文件
  • 原文地址:https://www.cnblogs.com/weiweivip666/p/14555675.html
Copyright © 2011-2022 走看看