Nuke 截屏

发布时间 2023-07-21 16:06:47作者: CGRun
import nuke
import os
from PySide2 import QtCore, QtGui, QtWidgets
import shutil

def capture_screen(save_path):
    app = QtWidgets.QApplication.instance()
    screen = app.primaryScreen()
    screenshot = screen.grabWindow(QtWidgets.QApplication.desktop().winId())
    # 将截图保存到文件
    screenshot.save(save_path)

    # 将截图存储到系统剪贴板
    clipboard = QtWidgets.QApplication.clipboard()
    clipboard.setPixmap(screenshot)
capture_screen("C:/Users/mengxiangwei/Pictures/Screenshots/temp.png")
class ScreenshotDialog(QtWidgets.QDialog):
    def __init__(self):
        super(ScreenshotDialog, self).__init__()

        self.setWindowTitle("Screenshot")

        layout = QtWidgets.QVBoxLayout()

        self.screenshot_label = QtWidgets.QLabel()
        self.screenshot_label.setAlignment(QtCore.Qt.AlignCenter)
        layout.addWidget(self.screenshot_label)

#        capture_button = QtWidgets.QPushButton("Capture")
#        capture_button.clicked.connect(self.capture)
#        layout.addWidget(capture_button)
        self.capture()
        self.setLayout(layout)

        self.save_path = None
        

    def capture(self):
        self.setWindowState(QtCore.Qt.WindowMinimized)  # 最小化窗口
        QtWidgets.QApplication.processEvents()  # 处理事件,确保窗口最小化
    
        self.save_path = ""#self.get_save_path()  # 获取保存路径
    
        if self.save_path is not None:  # 检查保存路径是否为None
            capture_screen(self.save_path)  # 执行截图并保存到文件
    
            self.setWindowState(QtCore.Qt.WindowActive)  # 恢复窗口状态
            self.update_screenshot_label()
    
            #self.open_folder(os.path.dirname(self.save_path))  # 打开保存路径所在的文件夹


    def get_save_path(self):
        options = QtWidgets.QFileDialog.Options()
        options |= QtWidgets.QFileDialog.DontUseNativeDialog
        save_path, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Save Screenshot", "", "PNG Files (*.png)", options=options)
        
        if save_path:
            if not save_path.endswith(".png"):
                save_path += ".png"
                
        return save_path


    def update_screenshot_label(self):
        self.screenshot_file = "C:/Users/mengxiangwei/Pictures/Screenshots/temp.png"
        # 读取截图文件
        screenshot_pixmap = QtGui.QPixmap(self.screenshot_file)

        # 缩放截图
        scaled_pixmap = screenshot_pixmap.scaled(400, 300, QtCore.Qt.KeepAspectRatio)

        # 显示缩放后的截图
        self.screenshot_label.setPixmap(scaled_pixmap)
    def open_folder(self, folder_path):
        os.startfile(folder_path)
    def contextMenuEvent(self, event):
        #if self.save_path is None:
        context_menu = QtWidgets.QMenu(self)
        save_action = QtWidgets.QAction("Save As...", self)
        save_action.triggered.connect(self.save_screenshot)
        context_menu.addAction(save_action)
        context_menu.exec_(event.globalPos())
        self.setWindowState(QtCore.Qt.WindowActive)  # 恢复窗口状态
        self.update_screenshot_label()

    def save_screenshot(self):
        if self.save_path is None:
            self.save_path = self.get_save_path()
            if self.save_path:
                if os.path.exists(self.save_path):
                    os.remove(self.save_path)
                shutil.copy(self.screenshot_file, self.save_path)

def show_screenshot_dialog():
    dialog = ScreenshotDialog()
    dialog.exec_()

show_screenshot_dialog()
Code