PyQt5初识

学习PyQt5是个机缘,那是因为我的linux16.04+python3.6使了浑身解数也装不上PyQt4!

PyQt5的官方文档貌似是要钱的!又想快速了解这个东东,我还是借鉴了万能的博客园大佬博主:https://home.cnblogs.com/u/archisama/

看样子是翻译的文档,很清晰。不过至今仍然很晕乎,这个东东对我写接口到底有多大用处

我是直接用pycharm写PyQt5 代码的,不过网上很多人说要配置一下环境https://www.cnblogs.com/dalanjing/p/6978373.html

不过很尴尬的是按照步骤,我又装不上pyqt5-tools!感叹天要亡我啊!看来机缘不够。

我这个小白,在没有配置环境的情况下,开始敲代码了,目前感觉还是有问题的,按照例子说窗口的默认图标-- 删除,隐藏,放大 这些图标都应该在右上角的,为毛我的都在左上角,导致我的自定义图标不显示,很是折腾了一番,感叹自我解决能力太低了,上述几个问题都没解决,希望有大佬看到,给小弟解答一下!

下面我就厚脸皮的放代码了

1.我的第一个栗子,一句一解释,符合我的风范

if __name__ == '__main__':
    # 所有的PyQt5应用必须创建一个应用(Application)对象,sys.argv参数是一个来自命令行的参数列表。
    # Python脚本可以在shell中运行。这是我们用来控制我们应用启动的一种方法。
    app = QApplication(sys.argv)
    # Qwidget组件是PyQt5中所有用户界面类的基础类
    w = QWidget()
    # resize方法调整了wiget的发小,意思是宽250,高150
    w.resize(250, 150)
    # move()方法移动widget组件到一个位置,这个位置是屏幕上x=300,y=300的坐标。
    w.move(300, 300)
    # 窗口的标题
    w.setWindowTitle('my first gui')
    # show()方法在屏幕上显示出widget。一个widget对象在这里第一次被在内存中创建,并且之后在屏幕上显示。
    w.show()
    # 应用进入主循环,事件处理开始执行。主循环用于接收来自窗口触发的事件,并且转发他们到widget应用上处理
    # sys.exit()方法确保一个不留垃圾的退出,主循环退出
    # exec_()方法有一个下划线。因为exec是Python保留关键字。因此,用exec_()来代替
    sys.exit(app.exec_())

2.自定义图标 

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon

class Example(QWidget):

    def __init__(self):
        # 调用父类的__init__构造方法
        super().__init__()
        # 调用initUI方法
        self.initUI()

    def initUI(self):
        # 将窗口在屏幕上显示,并设置了它的尺寸(x轴,y轴,宽,高) (Geometry:几何形状 音标:[dʒiˈɑ:mətri])
        self.setGeometry(300, 300, 300, 250)
        # 设置窗口标题
        self.setWindowTitle('Icon')
        #设置图标,QIcon对象接收一个我们要显示的图片路径作为参数。
        self.setWindowIcon(QIcon('web3.png'))

        self.show()


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

 本来它应该是这样的

然而我的确是这样的,所以抱歉,下面的所有涉及窗口图标的都是不显示的,难道这个跟我的linux系统有关?反正图片路径绝对没有问题,我都是同级目录下

3.显示了提示框

class Example(QWidget):

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

        self.initUI()

    def initUI(self):
        # 设置了用于提示框的字体。我们使用10px大小的SansSerif字体。
        QToolTip.setFont(QFont('SansSerif', 10))
        # 鼠标放到敞口提示语
        self.setToolTip('This is a <b>QWidget</b> widget')
        # 设置button 按钮
        btn = QPushButton('Button', self)
        # 鼠标已到button按钮框里面,不用点击展示提示语
        btn.setToolTip('This is a <b>QPushButton</b> widget')
        # 改变了按钮的大小,并移动了在窗口上的位置。setHint()方法给了按钮一个推荐的大小。
        btn.resize(btn.sizeHint())
        btn.move(50, 50)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Tooltips')
        self.show()


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

结果 

我的图截不到效果,我就借了原图

 4.关闭窗口

import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication
from PyQt5.QtCore import QCoreApplication

# 关闭窗口
# 事件处理系统由信号&槽机制建立。如果我们点击了按钮,信号clicked被发送。槽可以是Qt内置的槽或Python 的一个方法调用。
class Example(QWidget):

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

        self.initUI()

    def initUI(self):
        qbtn = QPushButton('Quit', self)
        # QCoreApplication类包含了主事件循环;它处理和转发所有事件。instance()方法给我们返回一个实例化对象
        # 点击信号连接到quit()方法,将结束应用。事件通信在两个对象之间进行:发送者和接受者。发送者是按钮,接受者是应用对象。
        qbtn.clicked.connect(QCoreApplication.instance().quit)
        qbtn.resize(qbtn.sizeHint())
        qbtn.move(50, 50)

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Quit button')
        self.show()


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

结果:

 5.消息盒子

# 如果我们关闭一个QWidget,QCloseEvent类事件将被生成。要修改组件动作我们需要重新实现closeEvent()事件处理方法
import sys
from PyQt5.QtWidgets import QWidget, QMessageBox, QApplication


class Example(QWidget):

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

        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Message box')
        self.show()

    def closeEvent(self, event):
        # 我们现实一个带两个按钮的message box:YES和No按钮。
        # 第一个字符串的内容被显示在标题栏上。
        # 第二个字符串是对话框上显示的文本。
        # 第三个参数指定了显示在对话框上的按钮集合。最后一个参数是默认选中的按钮。这个按钮一开始就获得焦点。返回值被储存在reply变量中。
        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()


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

结果

 

 6.屏幕上的居中窗口

import sys
# QtGui.QDesktopWidget类提供了我们桌面窗口的信息,包含了屏幕尺寸
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication


class Example(QWidget):

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

        self.initUI()

    def initUI(self):
        self.resize(250, 150)
        # 调用窗口居中center函数
        self.center()
        self.setWindowTitle('Center')
        self.show()

    def center(self):
        # 获得主窗口的一个矩形特定几何图形->qr。这包含了窗口的框架。frame:框架
        qr = self.frameGeometry()
        # 算出相对于显示器的绝对值。并且从这个绝对值中,我们获得了屏幕中心点->cp
        cp = QDesktopWidget().availableGeometry().center()
        # 矩形已经设置好了它的宽和高。现在我们把矩形的中心设置到屏幕的中间去。矩形的大小并不会改变。
        qr.moveCenter(cp)
        # 移动了应用窗口的左上方的点到qr矩形的左上方的点,因此居中显示在我们的屏幕上
        self.move(qr.topLeft())


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

结果

 

 over...... 

猜你喜欢

转载自www.cnblogs.com/zzy-9318/p/10156719.html
今日推荐