pyqt 截屏颜色变淡
时间: 2023-10-15 16:05:58 浏览: 145
可能是因为你截屏时使用了 alpha 通道,导致颜色变淡。你可以尝试将 alpha 通道设置为不透明(255),然后再截屏。以下是一种可能的解决方案:
```python
import sys
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtGui import QColor, QPainter, QPixmap
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow, QMenu, QMenuBar, QAction, QFileDialog
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 定义截屏窗口
self.screenshot_label = QLabel(self)
self.screenshot_label.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint | Qt.Tool)
self.screenshot_label.setStyleSheet("background-color: rgba(255, 255, 255, 0.5);")
self.screenshot_label.hide()
# 定义菜单栏
menubar = QMenuBar(self)
file_menu = QMenu("File", self)
menubar.addMenu(file_menu)
self.setMenuBar(menubar)
# 定义动作
screenshot_action = QAction("Screenshot", self)
screenshot_action.setShortcut("Ctrl+Shift+S")
screenshot_action.triggered.connect(self.take_screenshot)
file_menu.addAction(screenshot_action)
def take_screenshot(self):
# 隐藏截屏窗口
self.screenshot_label.hide()
# 获取屏幕截图
pixmap = QPixmap.grabWindow(QApplication.desktop().winId())
# 显示截屏窗口
self.screenshot_label.setPixmap(pixmap)
self.screenshot_label.setGeometry(pixmap.rect())
self.screenshot_label.show()
# 设置定时器监听截屏窗口的关闭事件
self.timer = QTimer(self)
self.timer.timeout.connect(self.on_timer_timeout)
self.timer.start(100)
def on_timer_timeout(self):
# 如果截屏窗口被关闭,则停止定时器
if not self.screenshot_label.isVisible():
self.timer.stop()
# 获取截屏窗口的截图
pixmap = self.screenshot_label.pixmap()
# 保存截图到文件
filename, _ = QFileDialog.getSaveFileName(self, "Save Screenshot", "", "Images (*.png *.xpm *.jpg)")
if filename:
pixmap.save(filename)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
```
在上面的代码中,我们将截屏窗口的背景色设置为半透明白色(rgba(255, 255, 255, 0.5)),这样截屏时就会有半透明的效果。如果你希望截屏时不出现半透明效果,可以将背景色设置为不透明白色(rgb(255, 255, 255))。
阅读全文