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文件夹里面:

image

双击就能运行。

功能优化:

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_()

打完收工!

posted @ 2025-10-26 23:03  帅到要去报警  阅读(6)  评论(0)    收藏  举报