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