如何为Python程序制作不可调整大小、不可移动的非窗口式小型启动器?
嘿,这个需求我刚好折腾过!用PyQt5就能轻松实现你想要的「伪图片」启动器效果,完全满足不可调大小、不可移动、非窗口样式的要求,下面给你详细的步骤和代码:
实现方案:用PyQt5打造自定义图片启动器
核心思路
- 移除窗口的边框和标题栏,让它看起来就是一张独立图片而非常规窗口
- 锁定窗口尺寸,和启动器图片大小完全匹配,禁止用户调整
- 禁用窗口的拖拽移动功能
- 将目标图片绘制为窗口背景,同时让窗口透明化,避免图片外出现多余区域
具体代码实现
首先确保你已经安装了PyQt5:
pip install pyqt5
然后是完整的可运行代码:
import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QPixmap, QPainter from PyQt5.QtCore import Qt class ImageLauncher(QWidget): def __init__(self, image_path): super().__init__() self.image_path = image_path self.init_window() def init_window(self): # 加载图片并获取原始尺寸 pixmap = QPixmap(self.image_path) img_w, img_h = pixmap.width(), pixmap.height() # 设置窗口核心属性:无边框、背景透明、可选置顶 self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint) self.setAttribute(Qt.WA_TranslucentBackground) # 固定窗口大小,和图片尺寸完全一致,禁止调整 self.setFixedSize(img_w, img_h) def paintEvent(self, event): # 将图片绘制到整个窗口区域 painter = QPainter(self) pixmap = QPixmap(self.image_path) painter.drawPixmap(self.rect(), pixmap) def mousePressEvent(self, event): # 重写鼠标点击事件,完全禁用窗口拖拽移动 pass def mouseMoveEvent(self, event): # 重写鼠标移动事件,彻底锁定窗口位置 pass if __name__ == "__main__": app = QApplication(sys.argv) # 替换成你的启动器图片路径 launcher = ImageLauncher("your_launcher_image.png") launcher.show() sys.exit(app.exec_())
代码细节解释
Qt.FramelessWindowHint:直接移除窗口的标题栏和边框,让启动器看起来就是一张图片setFixedSize():强制窗口大小和图片一致,用户无法拖动边缘调整尺寸- 重写
mousePressEvent和mouseMoveEvent并留空,彻底禁用窗口的拖拽移动功能 Qt.WA_TranslucentBackground:让窗口背景透明,避免图片之外出现白色或灰色的多余区域
额外优化建议
- 如果需要点击启动器图片时打开你的Python程序,可以在
mousePressEvent里添加启动逻辑:
import subprocess def mousePressEvent(self, event): # 启动你的目标Python程序 subprocess.Popen(["python", "your_main_program.py"]) # 启动后自动关闭启动器窗口 self.close()
- 如果想要启动器显示一段时间后自动关闭,可以添加定时器:
from PyQt5.QtCore import QTimer # 在init_window方法末尾添加 QTimer.singleShot(3000, self.close) # 3秒后自动关闭窗口
内容的提问来源于stack exchange,提问作者cr8f2kvi9b7gqpf1
相关产品推荐
相关产品推荐

