zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    js获取当前页面url网址等信息
    jQuery 复选框全选/取消全选/反选
    js获取日期实例之昨天今天和明天、后天
    mysql不重启修改参数变量
    php 读取功能分割大文件实例详解
    php批量删除数据库下指定前缀的表
    PHP遍历目录返回统计目录大小实例
    PHP二维数组如何根据某个字段排序
    PHP 如何获取二维数组中某个key的集合(高性能查找)
    jQuery 隐藏与显示 input 默认值
  • 原文地址:https://www.cnblogs.com/lhuser/p/14043080.html
Copyright © 2011-2022 走看看