一直以来做界面都是用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
来源:oschina
链接:https://my.oschina.net/propagator/blog/4314919