从0到1 一步一步创建一个pyqt的窗口程序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fhqlongteng/article/details/82964278

1、安装相关软件和模块

    安装python 3.5, Qtcreat还有如下的模块

使用pyqt创建一个窗口程序的过程 - 一个人的温暖 - 非著名软件专家


2、使用Qtcreat创建一个窗口界面,并且保存,如下图

使用pyqt创建一个窗口程序的过程 - 一个人的温暖 - 非著名软件专家

 3、在命令行中进入qt工程所在的目录,输入命令pyuic5 mainwindow.ui -o mainwindow.py   从ui文件生成py文件

     对mainwindow.py文件中相关的显示的地方做一些手工的修改,最后的代码如下:

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

# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created by: PyQt5 UI code generator 5.8.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(400, 300)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.lineEdit = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit.setGeometry(QtCore.QRect(100, 10, 191, 21))
        self.lineEdit.setObjectName("lineEdit")
        self.label = QtWidgets.QLabel(self.centralWidget)
        self.label.setGeometry(QtCore.QRect(10, 10, 81, 21))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralWidget)
        self.label_2.setGeometry(QtCore.QRect(40, 80, 54, 12))
        self.label_2.setObjectName("label_2")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralWidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(100, 80, 191, 20))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.pushButton = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton.setGeometry(QtCore.QRect(270, 200, 75, 23))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralWidget)
        self.menuBar = QtWidgets.QMenuBar(MainWindow)
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 23))
        self.menuBar.setObjectName("menuBar")
        MainWindow.setMenuBar(self.menuBar)
        self.mainToolBar = QtWidgets.QToolBar(MainWindow)
        self.mainToolBar.setObjectName("mainToolBar")
        MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
        self.statusBar = QtWidgets.QStatusBar(MainWindow)
        self.statusBar.setObjectName("statusBar")
        MainWindow.setStatusBar(self.statusBar)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "NTP时间同步"))
        self.label.setText(_translate("MainWindow", "NTP服务器地址"))
        self.label_2.setText(_translate("MainWindow", "北京时间"))
        self.pushButton.setText(_translate("MainWindow", "请求时间"))
        self.lineEdit.setText(_translate("MainWindow", "ntp1.aliyun.com"))

 4、创建窗口程序要执行的逻辑程序,本程序的从网上NTP服务器获取时间的功能,创建ntp.py文件,此文件和ui工程不在一个目录下,另创建一个目录下面,同时把上面生成的mainwindow.py文件复制到此目录下面。ntp.py文件的代码如下。

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtGui import QIcon
from mainwindow import Ui_MainWindow
import sys
from datetime import datetime
import ntplib
from pyico import *


class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
   
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

       
        # 设置应用程序的窗口图标
        self.setWindowIcon(QIcon(":/clock.png"))

       
        #默认选择结果取反
        self.pushButton.clicked.connect(self.ntp)
        self.client = ntplib.NTPClient()

    def ntp(self):
       
        self.statusBar.showMessage('开始请求')
        #从输入框读入字符串
        input_s = self.lineEdit.text()
        print(input_s)
       
        try:
            response = self.client.request(input_s)
        except:
            print('Error')
            self.statusBar.showMessage('请求失败')
            return None
       

        out_s = datetime.fromtimestamp(response.tx_time)
        print(out_s)
        #out_s是一个对象,必须转换成字符串后才能输出来编辑框中去
        self.lineEdit_2.setText(str(out_s))
        self.statusBar.showMessage('请求完成')
       

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

5、EXE文件图标和窗口打开后的左上角的图标处理

    首先找好适合的png图片,并且用工具转换成一个icon格式的文件,把这两个文件复制到ui工程下面,可以使用qtCreat创建一个包含图标文件的资源文件,扩展名为.qrc。也可以自己用记事本手动编辑出来一个,格式很简单。

使用pyqt创建一个窗口程序的过程 - 一个人的温暖 - 非著名软件专家

 6、根据icon文件生成pyico.py文件,此文件用于窗口左上角的图标显示,并把此文件复制到ntp代码的目录下面,此目录下还需要复制过来2个图标的图片文件

      在命令行中输入pyrcc5 ntp.qrc -o pyico.py

7、以上程序调试通过后,在命令中输入pyinstaller --icon=clock.ico --paths=E:\python_test\api-ms-win -F -w ntp.py生成可以windows下面可执行的exe文件。其中=E:\python_test\api-ms-win这个目录下包含pyqt运行所调用的windows窗口显示相关的dll库文件。具体的库文件可以查看博主的另外一篇博客。

8、最后在生成的EXE如下,打开运行一下

使用pyqt创建一个窗口程序的过程 - 一个人的温暖 - 非著名软件专家

猜你喜欢

转载自blog.csdn.net/fhqlongteng/article/details/82964278