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