PyQt 实现 GUI

假设你已经会python的一些基本知识.本文带你入门GUI. 

环境:

版本:Python3.6

IDE: Pycharm

界面库: QT5

1. 安装QT5库: 

pip install pyqt5-tools

 

2、设置PyCharm的外部工具库

QtDesigner与PyCharm的链接见下图所示:点击PyCharm的File->Settings->Tools->External tools打开外部工具界面,点‘+'号进入添加外部工具界面。在‘Name'处输入工具名称,这个名称可以随便取,只要自己清楚就行,我这里写的是Qt designer。然后,找到安装的designer.exe所在的路径(一般在python安装目录下的Lib\site-packages\pyqt5_tools文件夹里),将其路径复制到‘Programs'处,注意要包含designer.exe的文件名。Working directory处设置自己的工作路径,qtdesigner生成的ui文件会默认保存在该路径。‘Arguments'不用设置,确认即可

 

按同样的方法添加pyuic,pyuic用于将qtdesigner生成的.ui文件转换成python可以识别的.py文件。其设置过程如下图所示,Programs处输入python.exe所在的路径和文件名,Arguments处输入:

-m PyQt5.uic.pyuic -o $FileNameWithoutExtension$.py $FileName$

 

在Working directory处输入:

$FileDir$

这样生成的py文件就会和被转换的ui文件位于相同的文件夹下。点击ok完成设置。

 

3. 新建项目,用全局python 解释器.(也可以用虚拟环境. 一般真实项目用虚拟环境)

  

 

4.设计GUI界面

打开QtDesigner: 

 

点击Mainwindow后,拖几个控件,然后保存在项目目录下保存 .ui文件. 然后退出QT

 

 

 右键刚才生成的文件用pyuic生成py文件. ( py文件才是python能运行的代码.前面的步骤只是为了利用图形化界面设计器帮助产生界面, 以及利用pyuic 转换成py代码  

 

生成后产生了此py代码

demo.py中生成了一个类为UI_MainWindow的类. (这个就是界面的类)

下面这个截图是我后面补的. 我分了两个目录, 为了同时演示pyside2(以后介绍)和QT5,  你的代码应当在项目根目录.  

 

 

 

新建一个main.py  作为主函数 ,并且写一个MyfirstDemo类继承UI类.以及QMainWindow类

#导入界面库的类
from 使用QT5.demo import  Ui_MainWindow
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow

#多重继承
# 1.自己画的ui类 Ui_MainWindow
# 2.QMainWindow 窗口可以包含菜单栏、工具栏、状态栏、标题栏等,是最常见的窗口形式,可以作为GUI程序的主窗口。
class MyfirstDemo(Ui_MainWindow,QMainWindow):
    #没有parent的QWidget类被认为是最上层的窗体(通常是MainWindow),
    #由于MainWindow的一些操作生成的新窗体对象,parent都应该指向MainWindow。

    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)

    ''' 上面的代码可以省略为:
       def __init__(self):
           super().__init__()
           self.setupUi(self)
    '''
if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = MyfirstDemo()
    ui.show()
    sys.exit(app.exec_())

 

 

运行起来:

 

 

接下来我们来添加一个事件

python中, signal 就是事件,  slot 就是方法

配置链接中, 左边是事件(signal), 右边是方法(slot), 拖的时候, 你可以把目标拖到button上, 也可以拖到窗体上,  拖到哪里, slot就在哪个类中定义.  (如拖到button上就在button中定义方法)

这一步的拖拽, 你需要实际操作下就有体会了. 

 

 

 重复上面的步骤生成 python代码,发现多了下面这句

self.pushButton.clicked.connect(MainWindow.showmsg)

然后手动添加方法: showmsg

 ok, 完事.....运行后,点击按钮可以在控制台打印bbbb

 

 

然后,我们再改进下, 点击按钮能弹出消息框.

 

导入包改成:
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtWidgets

代码改下:

 

 

 

 运行:

 

 

 

嗯, 看上去非常完美

此时发现一个问题,  如果用ui设计器重新生成代码,  则代码会冲掉.  因此,建议把slot signal 全部放在子类中. 建议手写代码. 不建议用设计器.

 

 

 

 

 https://www.jb51.net/article/163557.htm

 

 

参考:https://www.jb51.net/article/170810.htm

posted @ 2020-11-26 16:52  Daniel_Lu  阅读(660)  评论(0编辑  收藏  举报