PyQt5入门(一)——基础

此总结主要参考下面这篇文章:PyQt5基本功能

文中出现的self均默认继承了QWidget的类,改为继承QMainWindow类也是可以的

1. 一个简单的框架:

import sys
from PyQt5.QtWidgets import QApplication, QWidget
#导入必要的相关库

if __name__ == '__main__':

    w = QWidget()
    w.show()

    app = QApplication(sys.argv)
    sys.exit(app.exec_())

除了上面这种,还可以用OOP编程

import sys
from PyQt5.QtWidgets import QApplication, QWidget


class Example(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):               
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

2. 窗口大小、位置和标题的设置

#这里假设前面已经声明继承了QWidget的类
self.resize(width,length)  
self.move(x,y)  # 左上角为(0,0)点

self.setGeometry(x,y,width,length)

self.setWindowTitle('window_title')

resize & move 和 setGeometry的区别参见下图:

resize和setGeometry的对应功能是一致的,move与对应的不同

3. 程序图标、字体、提示语

from PyQt5.QtWidgets import QToolTip
from PyQt5.Gui import QFont, QIcon
#这里只导入与这部分内容直接相关的库

#程序图标
self.setWindowIcon(QIcon(image.path))#如果是在当前文件夹下,只需填入文件名即可

#字体/字号
QToolTip.setFont(QFont('SansSerif',10))

#提示语
self.setToolTip('sldfjlj')#这里可以使用丰富的文本格式包括HTML

4. 按钮

from PyQt5.QtWidgets import QPushButton

btn = QPushButton('Button_name',self) 

btn.resize(btn.sizeHint()) #默认尺寸
btn.move(50,50)
btn.setToolTip('')
  • 将button和程序退出联系起来
from PyQt5.QtCore import QCoreApplication

btn.clicked.connect(QCoreApplication.instance().quit)

5. 消息框

from PyQt5.QtWidgets import QMessageBox
#这里的closeEvent是一个已经存在的函数,由点击右上角的‘X’触发,这里是把这个函数进行修改
#所以在自己编写的程序里往往是看不到对这个函数的调用的,这个与下面一部分内容的示例是不同的

    def closeEvent(self, event):

        reply = QMessageBox.question(self,'Message',"Are you sure to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        #第一个参数是title,第二个参数是显示的问题,第三个参数是指定按钮的组合出现在对话框中,最后一个参数是默认按钮,就是对话框出现后敲回车执行的按钮
        #目前来看后两个参数是只能这样写而不能写成别的形式的,首字母甚至不能是小写形式,感觉应该是可以改的
        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()
  • 将button和消息框联系起来
btn.clicked.connect(self.msg)

#显示问题
def msg(self):
    reply = QMessageBox.question(self,'Message',"Are you sure to quit?", QMessageBox.Yes|QMessageBox.No, QMessageBox.No)

#显示信息
def msg(self):
    reply = QMessageBox.information(self,'信息提示框',"ok, 弹出测试信息")

6. 窗口居中

from PyQt5.QtWidgets import QDesktopWidget

    self.center()

    def center(self):
        #获得窗口
        qr = self.frameGeometry()
        #获得屏幕中心点
        cp = QDesktopWidget().availableGeometry().center()
        #显示到屏幕中心
        qr.moveCenter(cp)
        self.move(qr.topLeft())

综合上述功能得到如下示例:

# -*- coding: utf-8 -*-


import sys
from PyQt5.QtWidgets import (QWidget, QToolTip, QPushButton, QApplication, QMessageBox, QDesktopWidget)
from PyQt5.QtGui import QFont,QIcon
from PyQt5.QtCore import QCoreApplication


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        QToolTip.setFont(QFont('SansSerif',10))

        self.setToolTip('这是一个 <b>QWidget</b> 部件')

        btn = QPushButton('退出', self)
        btn.setToolTip('这是一个 <b>QPushButton</b> 部件')
        # default size
        btn.resize(btn.sizeHint())

        btn.move(50, 50)
        btn.clicked.connect(QCoreApplication.instance().quit)

        self.setGeometry(300,300,300,200)
        self.center()

        self.setWindowTitle('tooltips')
        self.setWindowIcon(QIcon('web.jpg'))
        self.show()

    def closeEvent(self, event):

        reply = QMessageBox.question(self, 'Message',
                                     "Are you sure to quit?", QMessageBox.Yes |
                                     QMessageBox.No, QMessageBox.No)

        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

    def center(self):


        qr = self.frameGeometry() # 获得窗口
        cp = QDesktopWidget().availableGeometry().center()# 获得屏幕中心点
        qr.moveCenter(cp)# 显示到屏幕中心
        self.move(qr.topLeft())

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

猜你喜欢

转载自blog.csdn.net/qq_34710142/article/details/80806416