PyQt5 入门

换了VSCODE开发,感觉比sublime好点,可能是由于第三版老弹框烦人吧。VSCODE看着也挺好看的。

学习 PyQt5 中文教程

0. 安装完之后错误

pip 安装了 pyqt5

from PyQt5.QtWidgets import QApplication, QWidget
这句错误:E0611:No name 'QApplication' in module 'PyQt5.QtWidgets'

搜到是要sip,卸载python5重新安装了sip后再试还是错误,但是直接在命令行运行是好的。说明现在是外部环境的问题,把当前Anaconda路径换为python3路径,还是有错误。
最后换google一次解决,在VSCODE用户配置里加

"python.linting.pylintArgs": [
        "--extension-pkg-whitelist=PyQt5"
    ]

ok.

当前版本

Python==3.7.0
PyQt5==5.11.2
PyQt5-sip==4.19.12
操作系统:win10 64位

1. Hello World

加图标的时候,没有反应,根据原作者overflow的链接看的更模糊了。
图片目录在F:\py\py-snippet\hominid\music.png
,换了个绝对路径就好了。
因为

如果你在C:\test目录下执行python getpath\getpath.py,那么os.getcwd()会输出“C:\test”,sys.path[0]会输出“C:\test\getpath”。

我工作目录是在F:\py\py-snippet,python执行时候的目录下没有图片,所以下面两种方式都可以:

self.setWindowIcon(QIcon(sys.path[0]+'/music.png'))
self.setWindowIcon(QIcon('hominid/music.png'))

第一篇很简单,放个窗口,控制大小和位置,退出

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

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    
    def initUI(self):
        # location and size 
        self.setGeometry(300,300,300,300)
        
        # title
        self.setWindowTitle('Icon')
        
        # icon
        self.setWindowIcon(QIcon(sys.path[0]+'/music.png'))
        
        # 提示消息字体
        QToolTip.setFont(QFont('Georgia',10))

        # 提示框
        self.setToolTip('this is <br/><i>python</i> and <i>pyqt5</i><hr/> program')

        # 按钮以及提示框
        btn=QPushButton('退出',self)
        # 退出事件
        btn.clicked.connect(QCoreApplication.instance().quit)
        btn.setToolTip('quick, quick click')
        #btn.resize(btn.sizeHint())
        btn.move(50,50)

        self.center()
        self.show()
        
    # 关闭事件
    def closeEvent(self,event):
        print('close')
        reply = QMessageBox.question(self,"answer","To be or not to be?",QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
        if reply == QMessageBox.Yes:
            #print(QMessageBox.Yes)
            event.accept()
        else:
            reply = QMessageBox.question(self,'
版权声明:本文为warcraft原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/warcraft/p/9439417.html