pyqt5

Python制作小软件——1. 安装并使用PyQt5进行界面设计

最近想学习利用Python进行GUI的设计,网上找了很多教程与方法,用的最多的是使用PyQt+Python就进行开发,同时利用PyQt做出来的界面也是相对而言较为方便且比较美观。

所以自己在闲暇之余,也学习了使用PyQt5+Python进行图形界面的设计,并开发一款属于自己的小软件。

第一篇博客将主要说明如何利用PyQt5进行界面设计,并转化成.py格式的文件。本文的Python版本是Python3.5,通过Anoconda安装的。


安装PyQt5与Qt Designer

PyQt5

通常只要安装了Anoconda,就会默认装好PyQt5,检验的方法很简单。只需在你的Python里面输入import PyQt5没有报错就可以了。没有的话直接在命令行窗口(Win+R,然后输入cmd)输入pip install PyQt5进行安装即可。(使用国内的源则可用如下的命令:pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple,可参考:pip(国内镜像)快速安装Python库

Qt Designer

Qt Designer是用来设计界面的,可以让用户在极短的时间里创建一个图形化用户界面的图形设计器。利用 Qt Designer,我们可以通过拖拉或点击的方式,在窗口的适当位置上添加一些输入框和按钮等窗口组件构造图形用户界面,并可预览效果。其界面如下:
这里写图片描述

左侧就是控件,右侧是每个控件中的一些属性,可以进行修改。

通常在我们安装完Anoconda后,只有PyQt5库,点进去没有Qt Designer,具体可以查看Anoconda的路径(例如:C:\Users\用户\Anaconda3\Lib\site-packages\PyQt5)。

所以如果我们想要使用Qt Designer则需要使用pip进行安装(不需要重新装几个G的Qt Creator)。我们需要打开命令行输入如下命令即可:

pip install PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
 
 
  • 1

然后我们再去Python库的路径下(D:\Anaconda3\envs\FANUC\Lib\site-packages\pyqt5_tools\Qt\bin),找到pyqt5-tools文件夹,里面就有designer.exe,双击进入即可。

在这里插入图片描述


设计自己想要的界面

然后就可以开始设计以及想要的界面了。我的目标是创建一个针对文件转换的小软件,也就是需要有一个输入文件路径,输出文件夹路径,确认以及取消几个按键组成,其最终效果如下:


这里写图片描述

在这里插入图片描述

其制作的方法其实非常简单,将左边的需要的内容一个一个往中间拖动即可,其实不需要排列太整齐,只需要大致的排成下图所示的样子即可:


这里写图片描述

然后全选,右键,选择Lay outLay out in a Grid就会自动排列整齐。(或者快捷键Ctrl+5


然后你也可以拖动,或者添加一些内容变成你想要的格式。

对于每一个控件,右侧都会有其对应的属性,通过修改里面的内容,就可对控件进行修改,包括文字大小、颜色、背景颜色、对象名称等等。
这里写图片描述

我们需要注意的是objectName,建议不要用默认的名称,而是修改成按钮的实际作用的英文名称。如果用默认的名称,需要记住左侧每一个元素以及与其对应的名称是什么,这在后面使用Python对其后端进行编程时需要用到。例如上图中所示的就是pushButton_2

在我们设计完成这样一个界面时候,直接将其保存,这样就可以得到一个.ui的文件。但这还不够,因为我们想使用Python进行程序的编写,所以还需要将其转换为.py格式的文件才行。


将.ui的文件转换为.py的文件

我们想修改文件的格式,当然不是仅仅只是将后缀进行修改就可以。而是需要在命令行中输入下述的命令,才可将srs1.0.ui文件转换成srs.py文件,而里面的代码也会变为Python的代码。

pyuic5 -o srs.py srs1.0.ui
 
 
  • 1

注意,需要转换的时候需要首先cd到储存srs1.0.ui文件的路径(例如将上面代码中的srs1.0.ui变为D:\Desktop\srs1.0.ui),或者还有一种方法不需要手动输入路径,直接输入上述命令即可。就是我们不用传统方式打开命令行,而是在文件存储的文件夹下打开Windows PowerShell,方式如下图所示:先文件夹形式打开桌面,然后点上面的文件,再选择Windows PowerShell


这里写图片描述

打开的界面如下所示,然后再输入pyuic5 -o srs.py srs1.0.ui即可转为文件名为srs.py.py文件。
这里写图片描述


Python制作小软件——2. 实现界面中的退出功能

生成的.py格式的文件

在上一篇博客中:Python制作小软件——1. 安装并使用PyQt5进行界面设计,我们说到生成了界面对应的.py格式的文件,里面的内容如下:

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

# Form implementation generated from reading ui file 'pyqt5_fanuc.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_TCP(object):
    def setupUi(self, TCP):
        TCP.setObjectName("TCP")
        TCP.resize(1272, 895)
        self.pushButton_2 = QtWidgets.QPushButton(TCP)
        self.pushButton_2.setGeometry(QtCore.QRect(1140, 840, 93, 28))
        self.pushButton_2.setObjectName("pushButton_2")
        self.button_3 = QtWidgets.QPushButton(TCP)
        self.button_3.setGeometry(QtCore.QRect(10, 550, 227, 28))
        self.button_3.setObjectName("button_3")
        self.textBrowser = QtWidgets.QTextBrowser(TCP)
        self.textBrowser.setGeometry(QtCore.QRect(10, 590, 881, 192))
        self.textBrowser.setObjectName("textBrowser")
        self.widget = QtWidgets.QWidget(TCP)
        self.widget.setGeometry(QtCore.QRect(10, 20, 548, 131))
        self.widget.setObjectName("widget")
        self.gridLayout = QtWidgets.QGridLayout(self.widget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")
        self.label_4 = QtWidgets.QLabel(self.widget)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(14)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.gridLayout.addWidget(self.label_4, 0, 0, 1, 2)
        self.label = QtWidgets.QLabel(self.widget)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 1, 0, 1, 1)
        self.port = QtWidgets.QLineEdit(self.widget)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.port.setFont(font)
        self.port.setObjectName("port")
        self.gridLayout.addWidget(self.port, 1, 3, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.widget)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 1, 2, 1, 1)
        self.IP = QtWidgets.QLineEdit(self.widget)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.IP.setFont(font)
        self.IP.setObjectName("IP")
        self.gridLayout.addWidget(self.IP, 1, 1, 1, 1)
        self.button_1 = QtWidgets.QPushButton(self.widget)
        self.button_1.setObjectName("button_1")
        self.gridLayout.addWidget(self.button_1, 2, 0, 1, 1)
        self.result_1 = QtWidgets.QLabel(self.widget)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(14)
        self.result_1.setFont(font)
        self.result_1.setText("")
        self.result_1.setObjectName("result_1")
        self.gridLayout.addWidget(self.result_1, 3, 0, 1, 4)
        self.widget1 = QtWidgets.QWidget(TCP)
        self.widget1.setGeometry(QtCore.QRect(10, 180, 1248, 132))
        self.widget1.setObjectName("widget1")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.widget1)
        self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.SQL_host = QtWidgets.QLineEdit(self.widget1)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.SQL_host.setFont(font)
        self.SQL_host.setText("")
        self.SQL_host.setObjectName("SQL_host")
        self.gridLayout_2.addWidget(self.SQL_host, 1, 1, 1, 1)
        self.label_9 = QtWidgets.QLabel(self.widget1)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_9.setFont(font)
        self.label_9.setObjectName("label_9")
        self.gridLayout_2.addWidget(self.label_9, 1, 8, 1, 1)
        self.SQL_database = QtWidgets.QLineEdit(self.widget1)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.SQL_database.setFont(font)
        self.SQL_database.setObjectName("SQL_database")
        self.gridLayout_2.addWidget(self.SQL_database, 1, 9, 1, 1)
        self.label_8 = QtWidgets.QLabel(self.widget1)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_8.setFont(font)
        self.label_8.setObjectName("label_8")
        self.gridLayout_2.addWidget(self.label_8, 1, 6, 1, 1)
        self.label_6 = QtWidgets.QLabel(self.widget1)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(14)
        self.label_6.setFont(font)
        self.label_6.setObjectName("label_6")
        self.gridLayout_2.addWidget(self.label_6, 0, 0, 1, 2)
        self.label_5 = QtWidgets.QLabel(self.widget1)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.gridLayout_2.addWidget(self.label_5, 1, 2, 1, 1)
        self.button_2 = QtWidgets.QPushButton(self.widget1)
        self.button_2.setObjectName("button_2")
        self.gridLayout_2.addWidget(self.button_2, 2, 0, 1, 2)
        self.label_3 = QtWidgets.QLabel(self.widget1)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.gridLayout_2.addWidget(self.label_3, 1, 0, 1, 1)
        self.SQL_port = QtWidgets.QLineEdit(self.widget1)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.SQL_port.setFont(font)
        self.SQL_port.setObjectName("SQL_port")
        self.gridLayout_2.addWidget(self.SQL_port, 1, 3, 1, 1)
        self.SQL_password = QtWidgets.QLineEdit(self.widget1)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.SQL_password.setFont(font)
        self.SQL_password.setObjectName("SQL_password")
        self.gridLayout_2.addWidget(self.SQL_password, 1, 7, 1, 1)
        self.SQL_user = QtWidgets.QLineEdit(self.widget1)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.SQL_user.setFont(font)
        self.SQL_user.setObjectName("SQL_user")
        self.gridLayout_2.addWidget(self.SQL_user, 1, 5, 1, 1)
        self.label_7 = QtWidgets.QLabel(self.widget1)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_7.setFont(font)
        self.label_7.setObjectName("label_7")
        self.gridLayout_2.addWidget(self.label_7, 1, 4, 1, 1)
        self.result_2 = QtWidgets.QLabel(self.widget1)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(14)
        self.result_2.setFont(font)
        self.result_2.setText("")
        self.result_2.setObjectName("result_2")
        self.gridLayout_2.addWidget(self.result_2, 3, 0, 1, 4)
        self.widget2 = QtWidgets.QWidget(TCP)
        self.widget2.setGeometry(QtCore.QRect(11, 350, 876, 189))
        self.widget2.setObjectName("widget2")
        self.gridLayout_4 = QtWidgets.QGridLayout(self.widget2)
        self.gridLayout_4.setContentsMargins(0, 0, 0, 0)
        self.gridLayout_4.setObjectName("gridLayout_4")
        self.gridLayout_3 = QtWidgets.QGridLayout()
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.label_14 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_14.setFont(font)
        self.label_14.setObjectName("label_14")
        self.gridLayout_3.addWidget(self.label_14, 0, 0, 1, 2)
        self.label_10 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_10.setFont(font)
        self.label_10.setObjectName("label_10")
        self.gridLayout_3.addWidget(self.label_10, 1, 0, 1, 1)
        self.pallet1_x = QtWidgets.QLineEdit(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.pallet1_x.setFont(font)
        self.pallet1_x.setText("")
        self.pallet1_x.setObjectName("pallet1_x")
        self.gridLayout_3.addWidget(self.pallet1_x, 1, 1, 1, 1)
        self.label_11 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_11.setFont(font)
        self.label_11.setObjectName("label_11")
        self.gridLayout_3.addWidget(self.label_11, 1, 2, 1, 1)
        self.pallet1_y = QtWidgets.QLineEdit(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.pallet1_y.setFont(font)
        self.pallet1_y.setObjectName("pallet1_y")
        self.gridLayout_3.addWidget(self.pallet1_y, 1, 3, 1, 1)
        self.label_12 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_12.setFont(font)
        self.label_12.setObjectName("label_12")
        self.gridLayout_3.addWidget(self.label_12, 1, 4, 1, 1)
        self.pallet1_z = QtWidgets.QLineEdit(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.pallet1_z.setFont(font)
        self.pallet1_z.setObjectName("pallet1_z")
        self.gridLayout_3.addWidget(self.pallet1_z, 1, 5, 1, 1)
        self.label_13 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_13.setFont(font)
        self.label_13.setObjectName("label_13")
        self.gridLayout_3.addWidget(self.label_13, 1, 6, 1, 1)
        self.pallet1_rotate = QtWidgets.QLineEdit(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.pallet1_rotate.setFont(font)
        self.pallet1_rotate.setObjectName("pallet1_rotate")
        self.gridLayout_3.addWidget(self.pallet1_rotate, 1, 7, 1, 1)
        self.label_17 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_17.setFont(font)
        self.label_17.setObjectName("label_17")
        self.gridLayout_3.addWidget(self.label_17, 2, 0, 1, 2)
        self.label_15 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_15.setFont(font)
        self.label_15.setObjectName("label_15")
        self.gridLayout_3.addWidget(self.label_15, 3, 0, 1, 1)
        self.pallet2_x = QtWidgets.QLineEdit(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.pallet2_x.setFont(font)
        self.pallet2_x.setText("")
        self.pallet2_x.setObjectName("pallet2_x")
        self.gridLayout_3.addWidget(self.pallet2_x, 3, 1, 1, 1)
        self.label_16 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_16.setFont(font)
        self.label_16.setObjectName("label_16")
        self.gridLayout_3.addWidget(self.label_16, 3, 2, 1, 1)
        self.pallet2_y = QtWidgets.QLineEdit(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.pallet2_y.setFont(font)
        self.pallet2_y.setObjectName("pallet2_y")
        self.gridLayout_3.addWidget(self.pallet2_y, 3, 3, 1, 1)
        self.label_19 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_19.setFont(font)
        self.label_19.setObjectName("label_19")
        self.gridLayout_3.addWidget(self.label_19, 3, 4, 1, 1)
        self.pallet2_z = QtWidgets.QLineEdit(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.pallet2_z.setFont(font)
        self.pallet2_z.setObjectName("pallet2_z")
        self.gridLayout_3.addWidget(self.pallet2_z, 3, 5, 1, 1)
        self.label_18 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_18.setFont(font)
        self.label_18.setObjectName("label_18")
        self.gridLayout_3.addWidget(self.label_18, 3, 6, 1, 1)
        self.pallet2_rotate = QtWidgets.QLineEdit(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.pallet2_rotate.setFont(font)
        self.pallet2_rotate.setObjectName("pallet2_rotate")
        self.gridLayout_3.addWidget(self.pallet2_rotate, 3, 7, 1, 1)
        self.gridLayout_4.addLayout(self.gridLayout_3, 0, 0, 1, 6)
        self.label_20 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_20.setFont(font)
        self.label_20.setObjectName("label_20")
        self.gridLayout_4.addWidget(self.label_20, 1, 0, 1, 2)
        self.label_21 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_21.setFont(font)
        self.label_21.setObjectName("label_21")
        self.gridLayout_4.addWidget(self.label_21, 2, 0, 1, 1)
        self.robot_x = QtWidgets.QLineEdit(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.robot_x.setFont(font)
        self.robot_x.setText("")
        self.robot_x.setObjectName("robot_x")
        self.gridLayout_4.addWidget(self.robot_x, 2, 1, 1, 1)
        self.label_23 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_23.setFont(font)
        self.label_23.setObjectName("label_23")
        self.gridLayout_4.addWidget(self.label_23, 2, 2, 1, 1)
        self.robot_y = QtWidgets.QLineEdit(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.robot_y.setFont(font)
        self.robot_y.setText("")
        self.robot_y.setObjectName("robot_y")
        self.gridLayout_4.addWidget(self.robot_y, 2, 3, 1, 1)
        self.label_22 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.label_22.setFont(font)
        self.label_22.setObjectName("label_22")
        self.gridLayout_4.addWidget(self.label_22, 2, 4, 1, 1)
        self.robot_z = QtWidgets.QLineEdit(self.widget2)
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        self.robot_z.setFont(font)
        self.robot_z.setText("")
        self.robot_z.setObjectName("robot_z")
        self.gridLayout_4.addWidget(self.robot_z, 2, 5, 1, 1)

        self.retranslateUi(TCP)
        self.pushButton_2.clicked.connect(TCP.close)
        QtCore.QMetaObject.connectSlotsByName(TCP)

    def retranslateUi(self, TCP):
        _translate = QtCore.QCoreApplication.translate
        TCP.setWindowTitle(_translate("TCP", "Dialog"))
        self.pushButton_2.setText(_translate("TCP", "cancel"))
        self.button_3.setText(_translate("TCP", "启动TCP服务器"))
        self.label_4.setText(_translate("TCP", "客户端"))
        self.label.setText(_translate("TCP", "IP"))
        self.label_2.setText(_translate("TCP", "port"))
        self.button_1.setText(_translate("TCP", "测试相机"))
        self.label_9.setText(_translate("TCP", "database"))
        self.label_8.setText(_translate("TCP", "password"))
        self.label_6.setText(_translate("TCP", "服务器"))
        self.label_5.setText(_translate("TCP", "port"))
        self.button_2.setText(_translate("TCP", "测试SQLServer"))
        self.label_3.setText(_translate("TCP", "host"))
        self.label_7.setText(_translate("TCP", "user"))
        self.label_14.setText(_translate("TCP", "托盘(抓取)TCP坐标"))
        self.label_10.setText(_translate("TCP", "x"))
        self.label_11.setText(_translate("TCP", "y"))
        self.label_12.setText(_translate("TCP", "z"))
        self.label_13.setText(_translate("TCP", "rotate"))
        self.label_17.setText(_translate("TCP", "托盘(放置)TCP坐标"))
        self.label_15.setText(_translate("TCP", "x"))
        self.label_16.setText(_translate("TCP", "y"))
        self.label_19.setText(_translate("TCP", "z"))
        self.label_18.setText(_translate("TCP", "rotate"))
        self.label_20.setText(_translate("TCP", "机器人TCP坐标"))
        self.label_21.setText(_translate("TCP", "x"))
        self.label_23.setText(_translate("TCP", "y"))
        self.label_22.setText(_translate("TCP", "z"))

在Python中查看在Qt Designer中设计的界面

我们发现,有了上述的代码,却不能直接运行查看我们刚刚设计出来的界面。这时我们首先将前面的.py文件存到Python的默认路径下,然后再新建一个文件夹,输入如下代码即可运行查看了。

from PyQt5.QtWidgets import *
from pyqt5_fanuc import Ui_TCP



class mywindow(QMainWindow, Ui_TCP):
    def __init__(self):
        super(mywindow, self).__init__()
        self.setupUi(self)
        # self.pushButton_2.clicked.connect(self.write_folder)
        

if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    ui = mywindow()
    ui.show()
    sys.exit(app.exec_())

运行之后就会弹出我们前面设计好的界面:


这里写图片描述

但这时候点击里面所有的按键都没有作用(因为还没写好里面的一些函数,只有一个忽悠人的空架子)。所以下面,我们就要开始丰富上面的那段代码,来实现每个按钮的功能。

在这之前,我们需要先设置Cancel的退出功能,这部分功能其实是在Qt Designer里面就需要设置好的。


设置按钮的退出的功能

首先回到我们的Qt Designer。首先选择上面的Edit Signals/Slots,如下图所示。这个叫做“槽”,很多博客对其有着详细的描述,这里我们只是简单的进行使用。


这里写图片描述

然后按着Cancel按钮,移动鼠标,就会弹出下面的框框出来:


这里我们选择下面clicked()然后将下面的显示所有内容那里打上勾,然后再选择右边的close(),即可完成操作。


完成之后的界面长下面这样:


这里写图片描述

然后进行保存即可。之后记得再将.ui文件转换为.py文件。

这一部分对应的原始文件中代码是:

self.pushButton_3.clicked.connect(SRS.close)
 
 
  • 1

这时,我们就可以再在Python运行主体函数,在弹出我们所需的界面后,点击Cancel发现可以直接关闭窗口了。

到这里,界面对应的代码基本就不需要再做改动了,后面的内部实现功能直接照着.py文件(例子中是srs.py)中的对象名称进行设计即可

Python制作小软件——3. 利用PyQt5实现界面中的功能

from PyQt5.QtWidgets import *
from pyqt5_fanuc import Ui_TCP



class mywindow(QMainWindow, Ui_TCP):
    def __init__(self):
        super(mywindow, self).__init__()
        self.setupUi(self)
        # self.pushButton_2.clicked.connect(self.write_folder)
        self.button_1.clicked.connect(self.TestConnect)
        self.button_2.clicked.connect(self.TestSQL)
        self.button_3.clicked.connect(self.run_server)
        self.IP.setText('127.0.0.1')
        self.port.setText('9998')
        self.SQL_host.setText('127.0.0.1')
        self.SQL_port.setText('1433')
        self.SQL_user.setText('sa')
        self.SQL_password.setText('Passw0rd')
        self.SQL_database.setText("robot")
        self.pallet1_x.setText('800')
        self.pallet1_y.setText('-561')
        self.pallet1_z.setText('117')
        self.pallet1_rotate.setText('90')
        self.pallet2_x.setText('-526')
        self.pallet2_y.setText('1110')
        self.pallet2_z.setText('95')
        self.pallet2_rotate.setText('0')
        self.robot_x.setText('0')
        self.robot_y.setText('0')
        self.robot_z.setText('670')

        # self.pushButton_ok.clicked.connect(self.process)

    def TestConnect(self):
        # 选取文件

        IP = self.IP.text()
        port = self.port.text()
        print(IP + ":" + port)
        client = socket.socket()  # 创建一个客户端
        # print("www")
        try:
            client.connect((str(IP), int(port)))  # 连接服务端

            self.result_1.setText(r'连接相机成功!')
        except ConnectionRefusedError as e:
            # print("端口{}未开放。".format(i+sp))

            self.result_1.setText(r'连接相机失败!')

    def TestSQL(self):
        host = self.SQL_host.text()
        port = self.SQL_port.text()
        user = self.SQL_user.text()
        password = self.SQL_password.text()
        database = self.SQL_database.text()

        conn = pymssql.connect(host=host, port=port, user=user, password=password, database=database)

        # conn = pymssql.connect(host='127.0.0.1',  port='1433', user='sa',password='Passw0rd', database='robot')
        try:
            cursor = conn.cursor()
            if cursor:
                self.result_2.setText(r"连接SQLServer成功!")
        except:
            # print("端口{}未开放。".format(i+sp))

            self.result_2.setText(r'连接SQLServer失败!')

    def run_server(self):
        pallet1 = [int(self.pallet1_x.text()), int(self.pallet1_y.text()), int(self.pallet1_z.text()),
                   int(self.pallet1_rotate.text())]
        pallet2 = [int(self.pallet2_x.text()), int(self.pallet2_y.text()), int(self.pallet2_z.text()),
                   int(self.pallet2_rotate.text())]
        TCP = [int(self.robot_x.text()), int(self.robot_y.text()), int(self.robot_z.text())]
        dict = {
            'IP': str(self.IP.text()),
            "port": int(self.port.text()),
            'SQL_user': self.SQL_user.text(),
            "SQL_password": self.SQL_password.text(),
            "SQL_host": self.SQL_host.text(),
            "SQL_port": self.SQL_port.text(),
            "SQL_database": self.SQL_database.text(),
            "pallet1": pallet1,
            "pallet2": pallet2,
            "TCP": TCP

        }
        
        self.textBrowser.append('服务器已启动')
        self.textBrowser.moveCursor(self.textBrowser.textCursor().End)  #转至最低消息
        QApplication.processEvents()  #刷新界面
        TCP_Server.create(dict).start_server()

if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    ui = mywindow()
    ui.show()
    sys.exit(app.exec_())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值