pycharm配置pyqt5_PyQt5信号与槽机制进阶(二)

Qt Desgner可视化设计窗体,窗体模板主要包括以下3种:

1、Dialogm模板,基于QDialog类的窗体,具有一般对话框的特性,如可以模态显示、具有返回值等。

2、Main Window模块,基于QMainWindow类的窗体,具有主窗口的特性,窗口上有主菜单栏、工具栏、状态栏等。

3、Widget模板,基于QWidget类窗体。QWidget类是所有界面组件的基类,如QLabel、QPushButton等界面组件都是从QWidget类继承而来的。QWidget类也是QDialog和QMainWindow的父类,基于QWidget类创建的窗体可以作为独立的窗口运行,也可以嵌入其他界面组件内显示。

28832ffb377a1f185a349aded82234d5.png

    Qt Desgner提供基本的编辑信号和槽的方法。本次实例新建Widget模板窗口,保存命名为MainWinSignalSlog.ui,实现单击关闭按钮后关闭窗口。

    Buttons模块中找到QPushButton控件拖入到窗体From中,属性区域找到按钮text属性,属性值改为"关闭窗口",将objectname属性值改为"closeWinBtn"。单击工具栏上的"编辑信号与槽",直接在"关闭窗口"按钮上按住鼠标左键不放,拖到弹出配置连接,看出按钮控件会发射很多信号,选择需要的即可。信号选择单击clicked(),槽函数选择close(),点击ok建立连接。

c65c5815bab459da77fdd6f5ae4b5e2e.png

    用以上方法建立信号与槽连接后,在UI工具右下侧的信号与槽编辑窗口可对建立的关系进行调整。

0ccfb97cbd21803c3351c6966a645987.png

    使用UI Designer设计好的窗体保存为MainWinSignalSlog.ui后,如要在python中使用这个窗体,需要使用PyQt5的工具pyuic5.exe将界面文件转换为Python文件。

1、在windows的cmd窗口中用cd切换到文件MainWinSignalSlog.ui保存目录位置,直接执行pyuic5 -o ui_MainWinSignalSlog.py MainWinSignalSlog.ui,编译输出的文件名可任意指定。 

2、也可以创建一个uic.bat保存到项目文件夹下,bat文件是windows的批处理文件,将以上命令保存到txt文本修改后缀为.bat。

3、也可以在 Pycharm 中配置 External Tools

    编译后在MainWinSignalSlog.ui文件所在的目录下输出ui_MainWinSignalSlog.py,内容如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'MainWinSignalSlog.ui'
#
# Created by: PyQt5 UI code generator 5.13.0
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_closeWinBtn(object):
    def setupUi(self, closeWinBtn):
        closeWinBtn.setObjectName("closeWinBtn")
        closeWinBtn.resize(981, 694)
        self.pushButton = QtWidgets.QPushButton(closeWinBtn)
        self.pushButton.setGeometry(QtCore.QRect(390, 270, 75, 23))
        self.pushButton.setObjectName("pushButton")

        self.retranslateUi(closeWinBtn)
        self.pushButton.clicked.connect(closeWinBtn.close)
        QtCore.QMetaObject.connectSlotsByName(closeWinBtn)

    def retranslateUi(self, closeWinBtn):
        _translate = QtCore.QCoreApplication.translate
        closeWinBtn.setWindowTitle(_translate("closeWinBtn", "Form"))
        self.pushButton.setText(_translate("closeWinBtn", "关闭窗口"))

    界面文件定义了一个类Ui_closeWinBtn,其父类是object,不是QWidget,定义一个函数setupUi(),传入参数两个,self是函数自己,closeWinBtn是传入的参数,另外retranslateUi()函数设置窗体的标题、标签文字等。

    编译转换后,就可以用Ui_closeWinBtn类来创建GUI应用程序。以下代码完成了点击按钮关闭窗口的功能实现。

#0、面向过程版本
from PyQt5 import QtWidgets
import sys
import ui_MainWinSignalSlog

#1、创建一个应用程序对象。
app=QtWidgets.QApplication(sys.argv)

#2、控件的操作
#创建控件
window=QtWidgets.QWidget()

ui=ui_MainWinSignalSlog.Ui_closeWinBtn()
ui.setupUi(window)  #调用Ui_closeWinBtn()类中setupUi()函数,创建窗体上其他组件,以window作为传递参数,建完整窗体

#设置控件(大小、位置、样式...)
window.setWindowTitle("")
window.resize(500,500)
window.move(400,200)

#展示控件
window.show()

#3、应用程序的执行,进入到消息循环
sys.exit(app.exec_())
#界面与逻辑分离的GUI程序框架
from PyQt5.Qt import *
from ui_MainWinSignalSlog import Ui_closeWinBtn

class Window(QWidget):
    def __init__(self,parent=None):
        super().__init__(parent)   #调用父类构造函数,创建QWidget窗体
        self.__ui=Ui_closeWinBtn()   #创建UI对象
        self.__ui.setupUi(self)     #构造UI

        # 设置控件(大小、位置、样式...)
        # self.setWindowTitle("")
        self.resize(600,400)
        self.move(400,200)
        self.setup_ui()

    def setup_ui(self):

        # 子控件设置
        label = QLabel(self)
        label.setText("Python数据分析实例")
        label.move(200,200)


if __name__ == '__main__':
    import sys
    #1、创建一个应用程序对象
    app=QApplication(sys.argv)
    #2、控件的操作
    #创建控件
    window=Window()
    #展示控件
    window.show()
    #3、应用程序的执行,进入到消息循环
    sys.exit(app.exec_())

    也可以一个信号触发多个槽函数。同理UI 工具设计布局(界面),建立信号与槽关系,转换为.py文件

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(819, 634)
        self.checkBox = QtWidgets.QCheckBox(Form)
        self.checkBox.setGeometry(QtCore.QRect(100, 240, 71, 16))
        self.checkBox.setObjectName("checkBox")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(170, 300, 113, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(100, 300, 54, 12))
        self.label.setObjectName("label")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

        self.checkBox.clicked.connect(self.label.setVisible)
        self.checkBox.clicked.connect(self.lineEdit.setEnabled)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.checkBox.setText(_translate("Form", "选择"))
        self.lineEdit.setText(_translate("Form", "显示2"))
        self.label.setText(_translate("Form", "显示1"))

    再次利用界面与逻辑分离的GUI程序框架,稍微修改,点击即可运行。

from PyQt5.Qt import *
from MainWinSignalSlog01 import Ui_Form

class Window(QWidget):
    def __init__(self,parent=None):
        super().__init__(parent)   #调用父类构造函数,创建QWidget窗体
        self.__ui=Ui_Form()   #创建UI对象
        self.__ui.setupUi(self)     #构造UI

        # 设置控件(大小、位置、样式...)
        # self.setWindowTitle("")
        self.resize(600,400)
        self.move(400,200)
        self.setup_ui()

    def setup_ui(self):

        # 子控件设置
        label = QLabel(self)
        label.setText("Python数据分析实例")
        label.move(200,200)


if __name__ == '__main__':
    import sys
    #1、创建一个应用程序对象
    app=QApplication(sys.argv)
    #2、控件的操作
    #创建控件
    window=Window()
    #展示控件
    window.show()
    #3、应用程序的执行,进入到消息循环
    sys.exit(app.exec_())

1ecb8b73fa11e4d6e0f40071f85358cc.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值