Python---开发桌面应用程序
早就知道可以使用Python的PyQT构建桌面应用程序了,但是没有具体实际过,以前都是使用前端来开发桌面应用程序的,安装依赖麻烦的要死,打包的时候还各种繁琐。
没想到使用Python来开发桌面应用程序如此的简单。
直接撸代码:
安装依赖:
pip install PyQt5
构建一个简单的PyQt程序:
from PyQt5.QtWidgets import QApplication, QWidget # 创建应用实例 app = QApplication([]) # 创建主窗口 window = QWidget() window.setWindowTitle("我的第一个 PyQt 程序") window.setGeometry(100, 100, 400, 300) # (x, y, width, height) # 显示窗口 window.show() # 运行应用 app.exec_()
运行它,桌面应用程序就创建好了。
具体代码参考:
https://www.runoob.com/python3/python-pyqt.html
我的需求是可以安装这个程序,然后能够打开网页,所以还需要安装网页模块:
pip install PyQtWebEngine
安装后就可以:
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout from PyQt5.QtWebEngineWidgets import QWebEngineView from PyQt5.QtCore import QUrl # 创建应用实例 app = QApplication([]) # 创建主窗口 window = QWidget() window.setWindowTitle("嵌入式网页浏览器") window.setGeometry(100, 100, 1024, 768) # 增大窗口以更好显示网页 # 创建垂直布局 layout = QVBoxLayout() # 创建网页视图组件 web_view = QWebEngineView() # 加载网页(这里以百度为例,你可以替换成任何URL) web_view.load(QUrl("http://www.baidu.com")) # 将网页视图添加到布局 layout.addWidget(web_view) # 设置窗口的主布局 window.setLayout(layout) # 显示窗口 window.show() # 运行应用 app.exec_()
还可以实现简易的浏览器:
from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QLineEdit, QPushButton) from PyQt5.QtWebEngineWidgets import QWebEngineView from PyQt5.QtCore import QUrl class Browser(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle("简易浏览器") self.setGeometry(100, 100, 1024, 768) # 布局 layout = QVBoxLayout() # 地址栏 self.url_input = QLineEdit() self.url_input.returnPressed.connect(self.load_url) # 导航按钮 btn_go = QPushButton("前往") btn_go.clicked.connect(self.load_url) # 网页视图 self.web_view = QWebEngineView() # 添加组件到布局 layout.addWidget(self.url_input) layout.addWidget(btn_go) layout.addWidget(self.web_view) self.setLayout(layout) def load_url(self): url = self.url_input.text() if not url.startswith(('http://', 'https://')): url = 'https://' + url self.web_view.load(QUrl(url)) if __name__ == "__main__": app = QApplication([]) browser = Browser() browser.show() app.exec_()
我想要的是打包为exe的桌面应用程序,只需要再安装一个模块:
pip inatall PyInstaller
写一个简易的应用程序,比如叫:4.py
import sys from PyQt5.QtWidgets import QApplication, QWidget if __name__ == '__main__': app = QApplication(sys.argv) win = QWidget() win.show() sys.exit(app.exec_())
然后就可以将这个 4.py 文件,或者上面的 .py 文件,打包为桌面软件:
pyinstaller -F -w 4.py
运行完成后,就会被打包在同目录的dist文件夹里面:

双击就能运行。
功能优化:
1、设置桌面应用图标以及取消应用的上下左右间距
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout from PyQt5.QtWebEngineWidgets import QWebEngineView from PyQt5.QtCore import QUrl from PyQt5.QtGui import QIcon # 导入 QIcon class WebBrowser(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle("百度") self.setGeometry(100, 100, 1400, 900) # 创建布局并去除边距 layout = QVBoxLayout() layout.setContentsMargins(0, 0, 0, 0) # 去除布局边距 # 创建网页视图 self.web_view = QWebEngineView() self.web_view.setContentsMargins(0, 0, 0, 0) # 去除控件边距 # 加载网页 self.web_view.load(QUrl("https://www.baidu.com")) # 网页加载完成后去除网页内容的边距 self.web_view.loadFinished.connect(self.remove_webpage_margins) # 添加控件到布局 layout.addWidget(self.web_view) self.setLayout(layout) def remove_webpage_margins(self, ok): if ok: # 使用 JavaScript 去除网页内容的 margin 和 padding js_code = """ document.body.style.margin = '0'; document.body.style.padding = '0'; document.documentElement.style.overflow = 'hidden'; // 可选:隐藏滚动条 """ self.web_view.page().runJavaScript(js_code) if __name__ == "__main__": app = QApplication([]) app.setWindowIcon(QIcon("appicon.png")) # 全局设 window = WebBrowser() window.show() app.exec_()
2、禁止鼠标右键
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout from PyQt5.QtWebEngineWidgets import QWebEngineView from PyQt5.QtCore import QUrl, QEvent from PyQt5.QtGui import QIcon class WebBrowser(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle("百度") self.setGeometry(100, 100, 1400, 880) layout = QVBoxLayout() layout.setContentsMargins(0, 0, 0, 0) self.web_view = QWebEngineView() self.web_view.setContentsMargins(0, 0, 0, 0) self.web_view.load(QUrl("https://www.baidu.com")) self.web_view.loadFinished.connect(self.remove_webpage_margins) layout.addWidget(self.web_view) self.setLayout(layout) # 安装事件过滤器 self.installEventFilter(self) self.web_view.installEventFilter(self) def remove_webpage_margins(self, ok): if ok: js_code = """ document.body.style.margin = '0'; document.body.style.padding = '0'; document.documentElement.style.overflow = 'hidden'; // 禁用网页右键菜单 document.addEventListener('contextmenu', function(e) { e.preventDefault(); }); """ self.web_view.page().runJavaScript(js_code) def eventFilter(self, obj, event): if event.type() == QEvent.ContextMenu: return True # 阻止右键菜单 return super().eventFilter(obj, event) if __name__ == "__main__": app = QApplication([]) app.setWindowIcon(QIcon("appicon.png")) window = WebBrowser() window.show() app.exec_()
打完收工!

浙公网安备 33010602011771号