• 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安装目录下的Libsite-packagespyqt5_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

  • 相关阅读:
    开源项目
    [Accessibility] Missing contentDescription attribute on image [可取行]失踪contentDescription属性图像
    Android 布局 中实现适应屏幕大小及组件滚动
    EF 错误记录
    EasyUI 加载时需要显示和隐藏 panel(面板)内容破版问题
    IE 报表缩放后页面破版
    VS 2017 引入nuget 问题
    SSRS 报表显示页面 asp net session丢失或者找不到 asp net session has expired or could not be found()
    log4net 配置
    网站
  • 原文地址:https://www.cnblogs.com/lhuser/p/14043080.html
Copyright © 2020-2023  润新知