PyQt的使用

原创
2020/06/17 21:22
阅读数 951

一直以来做界面都是用VS,或者一些专用的工具。最近要做一个小工具,朋友建议用PyQt,于是学习了一下,做此记录。

 

本质上,PyQt就是Qt,只不过用Qt Designer创建界面之后,再把生成的xml文件A用pyuic转成py文件B,然后再在py文件C中导入B,即可进行调用。其中A类似于WPF中的xaml,B类似于VS从xaml生成的g.cs和g.i.cs,而C类似于xaml.cs文件。

 

因为装了Anaconda,好像自带了PyQt需要的工具包,因此就不折腾了,直接打开Anaconda Prompt,运行designer.exe。整个界面和VS很像,从左边拖一些控件到中间的窗口上即可。

 

设计完成后保存,默认保存为ui文件。

 

保存之后,在Anaconda Prompt中运行pyuic5指令,将test.ui转换为test.py

pyuic5.bat -o test.py test.ui

此时在相应的目录下生成test.py。

查看test.py的内容如下,可见其内容为控件布局,命名等。

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

# Form implementation generated from reading ui file '.\test.ui'
#
# Created by: PyQt5 UI code generator 5.9.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(649, 459)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(260, 150, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(110, 150, 113, 20))
        self.lineEdit.setObjectName("lineEdit")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 649, 23))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.menubar.addAction(self.menu.menuAction())

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "显示文本"))
        self.menu.setTitle(_translate("MainWindow", "文件"))

 

在同一目录下新建一个main.py文件如下,

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

from test import Ui_MainWindow
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QMessageBox

class MainWindow(QMainWindow):
    def __init__(self, parent = None):
        super(MainWindow, self).__init__(parent=parent)
        global ui
        ui = Ui_MainWindow()
        ui.setupUi(self)
        ui.pushButton.clicked.connect(self.click)

    def click(self, event):
        content = ui.lineEdit.text()
        QMessageBox.information(self, "Notice", content)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    m_window = MainWindow()
    m_window.show()
    sys.exit(app.exec_())

代码很简单,基本上可以直接读懂,最后执行结果就是把lineEdit控件中的内容在新的提示窗口显示出来。

 

此时可用如下语句打包为单个exe文件,其中-F表示打包为单个文件,-w表示运行时不显示控制台,--icon表示程序图标文件。不过我没装pyinstall,就不尝试了。

pyinstall -Fw --icon=xxx.ico main.py

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部