+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-08(120)

2019-09(98)

2019-10(12)

2019-11(3)

2019-12(15)

2020-01(22)

2020-02(25)

Python使用QtDesigner、PyQt5设计Winform窗体实现信号signal和槽slot的连接,并将Ui自动转换为Python代码

发布于2020-02-10 17:27     阅读(212)     评论(0)     点赞(5)     收藏(1)


Python使用QtDesigner生成Winform窗体实现信号signal和槽slot的连接,并将Ui自动转换为Python代码

1.安装QtDesigner和PyQt5

QtDesigner是一款Qt的Ui设计工具,能像C#winform程序一样拖控件到界面上,PyQt5是Python的桌面程序库,安装方式如下:

pip install pyqt5_tools # 只有安装了这个后,就有QtDesigner
pip install PyQt5 # 安装PyQt5的包
  • 1
  • 2

安装完成后,可以在Python中引用PyQt5的包,同时安装完成后QtDesigner的设计工具的路径为*D:\Program Files (x86)* Python38-32\Lib\site-packages\pyqt5_tools\Qt\bin\designer.exe,前面的目录是你自己Python的安装目录。

2.使用QtDesigner设计自己的UI界面

(1).打开designer.exe,进入选择Main Window(主窗体),点击Creat:

新建模板

(2).从左侧工具栏中选择PushButton和Line Edit按住鼠标不放拖动到主窗体,可以在右侧属性中修改控件的名称和属性,这里就使用默认的(可自己添加更多的控件):

主窗体建立

(3).接下来,做一个简单的功能,点击Pushbutton后将LineEdit中的文字清除掉:

在右下角的signal/slot Edit 位置点击+号,新增一个signal和solt;
Sender选择pushButton,Signal选择clicked(),Receiver选择lineEdit,Slot选择clear();
这里的信号和槽的意义:pushButton的鼠标点击产生一个信号(clicked),这个信号发送给lineEdit对象接受,lineEdit接受到信号后执行槽里面的响应(clear),结果就是清空lineEdit里面的文本内容。
一个信号可以对应多个槽,一个槽也可以接收多个信号的响应。
信号和槽

(4).设置号信号和槽后,designer可以直接模拟运行窗体,点击Form→Preview in→Windows Style,运行窗体,在文本框中输入文字,点击pushButton后,文字被清除:

在这里插入图片描述
点击按钮

3.将designer设计的ui文件转换为Python代码

(1).点击File→Save,保存刚才设计的窗体ui文件

(2).切换到保存的ui文件目录,按住shift键,鼠标右键后选择在此处打开power shell,输入指令:pyuic5 -o myui.py untitled.ui,myui.py为你将要保存的py文件名,后面的untitled.ui为刚才保存的ui文件:

生成py文件

4.在Python中运行窗体,并实现自己的signal和slot连接

(1).为了后面在更新主窗体UI界面时,生成py代码更好的维护,我们新建一个类继承ui类,在继承的类中实现自己的代码,这样后续更新主窗体后直接覆盖myui.py文件就可以了。

(2).自动生成的myui.py代码如下:

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
# Created by: PyQt5 UI code generator 5.13.2
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(591, 370)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(240, 180, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(220, 120, 113, 20))
        self.lineEdit.setObjectName("lineEdit")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 591, 23))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
		
        self.retranslateUi(MainWindow)
        # 这里将我们前面新增的pushbButton和lineEdit的连接删掉,我们在继承的类中自定义
		# self.pushButton.clicked.connect(self.lineEdit.clear)
        # QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

(3).自定义一个新的类,继承自动生成的类中的Ui_MainWindow,并定义pushButton的clicked响应,这里就显示文本“Hello,World!”。

from myui import Ui_MainWindow
import sys
from PyQt5 import QtWidgets, QtCore


class MyWinform(Ui_MainWindow):
    def connect_signal_slot(self, MainWindow):
        self.pushButton.clicked.connect(self.send_txt)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def send_txt(self):
        self.lineEdit.setText("Hello,World!")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

(4).完成后,启动窗体,并点击pushButton,自动在文本框中写入文本“Hello,World!”,代码如下:

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = MyWinform()  # 创建对象
    ui.setupUi(MainWindow)  # 调用父类的setupUi,生成控件
    ui.connect_signal_slot(MainWindow)  # 连接pushbutton的clicked信号和自定义的槽sendtxt
    MainWindow.show()  # 显示主窗体
    sys.exit(app.exec_())
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

运行的效果如下:
运行效果
到这里一个简单的Python写的Winform窗体程序就完成了,可以自己增加更多的控件,实现自定义的功能。
欢迎交流学习(python业余爱好者):扫码加我的微信
微信二维码

发布了1 篇原创文章 · 获赞 1 · 访问量 12


所属网站分类: 技术文章 > python文章

作者:yoyo

链接: http://www.pythonheidong.com/blog/article/231014/

来源:python黑洞网 www.pythonheidong.com

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

5 0

赞一赞 or 踩一踩

收藏该文
已收藏

评论内容:(最多支持255个字符)

相似文章

  5171. 最接近的因数

  Python实现生成西瓜数据集的Excel文件

  Leetcode - 删除排序数组中的重复项

  python第五天-字符串

  数据结构|LeetCode(力扣)经典题:队列

  python学习笔记(3)

  TYD_初识python数据可视化库-Matplotlib

  Scrapy安装与应用教程

  python实现修改文件中的内容

  mac环境下python3.6安装pyhanlp工具包

优质资源排行榜

 python经典电子书大合集下载 下载次数 8138

 零基础java开发工程师视频教程全套,基础+进阶+项目实战(152G) 下载次数 7550

 零基础前端开发工程师视频教程全套,基础+进阶+项目实战(共120G) 下载次数 7442

 零基础大数据全套视频400G 下载次数 7006

 零基础php开发工程师视频教程全套,基础+进阶+项目实战(80G) 下载次数 6893

 零基础软件测试全套系统教程 下载次数 6506

 全套人工智能视频+pdf 下载次数 6443

 IOS全套视频教程 基础班+就业班 下载次数 4680

 编程小白的第一本python入门书(高清版)PDF下载 下载次数 3648

10  effective python编写高质量Python代码的59个有效方法 pdf下载 下载次数 3361

11  Python深度学习 pdf下载 下载次数 3156

12  笨办法学python pdf下载 下载次数 3087

13  Python Cookbook第三版中文PDF下载高清完整扫描原版 下载次数 3024

14  树莓派Python编程指南 pdf下载 下载次数 3011

15  python从入门到精通视频(全60集)python视频教程下载 下载次数 3009

16  python项目开发视频 下载次数 3002

17  使用python+pygame开发的小游戏《嗷大喵快跑》源码下载 下载次数 3000

18  黑马2017年java就业班全套视频教程 下载次数 2992

19  Python基础教程 pdf下载 下载次数 2988

20  python实战项目 平铺图像板系统源码下载,适用于想要保存,标记和共享图像,视频和网页的用户 下载次数 2987

21  利用python实现程序内存监控脚本 下载次数 2987

22  老男孩python自动化视频 下载次数 2983

23  老王python基础+进阶+项目视频教程 下载次数 2974

24  尚硅谷Go学科全套视频 下载次数 2972

25  某硅谷Python项目+AI课程+核心基础视频教程 下载次数 2968

26  Web前端实战精品课程 下载次数 2967

27  Python算法教程_中文版 pdf下载 下载次数 2966

28  tron python小游戏 下载次数 2963

29  [小甲鱼]零基础入门学习Python 下载次数 2962

30  老男孩python全栈开发15期 下载次数 2958

31  2017最新web前端开发完整视频教程附源码 下载次数 2948

32  最新全套完整JAVAWEB2018开发视频 下载次数 2926

33  流畅的Python PDF下载高清完整扫描原版 下载次数 2919

34  Spring boot实战视频6套下载 下载次数 2910

35  python全套视频十五期(116G) 下载次数 2908

36  Python高性能编程 pdf下载 下载次数 2906

37  Python项目实战 下载次数 2887

38  30个小时搞定Python网络爬虫 含源码 下载次数 2884

39  简明python教程 (A Byte of Python)pdf下载 下载次数 2884

40  利用Python进行数据分析 pdf下载 下载次数 2884

41  python全自动抢火车票教程-python视频教程下载 下载次数 2883

42  尚硅谷大数据之Hadoop视频 下载次数 2876

43  Python A~B~C~ python视频教程下载 下载次数 2866

44  数据结构与算法视频(小甲鱼讲解-全) 下载次数 2864

45  web小程序表白天数倒计时源码下载 下载次数 2863

46  python基础视频教程 下载次数 2862

47  go语言全套视频 下载次数 2855

48  清华学霸尹成Python爬虫视频-ok 下载次数 2846

49  黑马前端36期最全视频和代码 下载次数 2843

50  2018最新全套web前端视频教程+源码下载 下载次数 2841