前言:由于云服务器中设置了安全组,需要填写公网ip地址。家庭公网ip总变,所以安全组中需要不断更换。之前都是通过百度IP地址,最近发现百度ip后搜索列表中的公网ip地址结果不见了,还需要进入某个链接,十分不爽。干脆现学现卖,做个桌面程序,省了几道步骤。
第一步:创建一个UI文件
第二步:点击保存,回到pycharm,可以看到工程目录下已经产生了pyqt.ui,右键它,Qt—>Pyuic,点击后即可产生pyqt.py文件
如果需要修改ui文件,最好先将py文件做个备份,因为每次转换为.py时会覆盖之前的py文件。
第三步:定义一个main函数调用
import sys
from pyqt import Ui_MainWindow
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import pyqtSlot
import requests
class MyWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super(MyWindow, self).__init__()
self.setupUi(self)
@pyqtSlot()
def on_pushButton_clicked(self):
my_ip = requests.get('http://ip.42.pl/raw').text
print(my_ip)
self.plainTextEdit.setPlainText(my_ip)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
sys.exit(app.exec_())
第四部:打包
安装一个pyinstaller
pip install pyinstaller
在命令行下执行
D:\pyworkspace\dafeiji\pyqt>Pyinstaller -F -w main.py
-F 选项指定生成单个的可执行程序,-w 选项指定生成图形用户界面程序(不需要命令行界面)
生成了一个 dist 子目录,并在该子目录下生成了一个 main.exe 文件
执行后出现ImportError: unable to find Qt5Core.dll on PATH 错误,通过参考其他大神的解释,就是有的版本pyqt5库对系统变量的加载存在bug。对有bug的版本库提供一种办法就是,在主程序中pyqt5库import之前就对系统变量进行手动设置
import sys, os
if hasattr(sys, 'frozen'):
os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
from pyqt import Ui_MainWindow
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import pyqtSlot
import requests
修改之后打包程序就不会报错了。
后记:我就做了一个页面,一个label,一个plaintext,一个button,打包出来有36M多,开什么玩笑,怎么才能小点,希望各位不吝赐教。