import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Combo(QComboBox):
def __init__(self, title, parent):
super(Combo, self).__init__( parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
print(e)
if e.mimeData().hasText():
e.accept()
else:
e.ignore()
def dropEvent(self, e):
self.addItem(e.mimeData().text())
class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUI()
def initUI(self):
lo = QFormLayout()
lo.addRow(QLabel("請把左邊的文字拖拽到右邊的下拉式功能表中"))
edit = QLineEdit()
edit.setDragEnabled(True)
com = Combo("Button", self)
lo.addRow(edit,com)
self.setLayout(lo)
self.setWindowTitle('簡單拖拽例子')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
import sys
import time
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabel, QLineEdit
class WorkerThread(QThread):
# 定义一个信号,用于向主线程发送消息
result_ready = pyqtSignal(int)
def __init__(self, data):
super().__init__()
self.data = data
def run(self):
# 从Qt面板读取字符串并进行计算
result = self.calculate_result(self.data)
# 发送结果信号
self.result_ready.emit(result)
def calculate_result(self, data):
# 模拟计算,这里简单地返回输入字符串的长度
time.sleep(2) # 模拟耗时操作
return len(data)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PyQt QThread 示例")
self.setGeometry(100, 100, 300, 200)
layout = QVBoxLayout()
self.input_lineedit = QLineEdit(self)
layout.addWidget(self.input_lineedit)
self.button = QPushButton("开始计算", self)
self.button.clicked.connect(self.start_task)
layout.addWidget(self.button)
self.result_label = QLabel("", self)
layout.addWidget(self.result_label)
self.central_widget = QWidget()
self.central_widget.setLayout(layout)
self.setCentralWidget(self.central_widget)
self.worker_thread = None
def start_task(self):
# 创建并启动工作线程
data = self.input_lineedit.text()
self.worker_thread = WorkerThread(data)
self.worker_thread.result_ready.connect(self.update_result)
self.worker_thread.start()
def update_result(self, result):
# 更新结果文本
self.result_label.setText(f"计算结果:{result}")
https://www.zhihu.com/column/pyqt5
import win32com.client
import os
import pythoncom
# 初始化 PowerPoint 應用程式
pythoncom.CoInitialize()
ppt_app = win32com.client.Dispatch("PowerPoint.Application")
ppt_app.Visible = True
# 新建一個簡報
presentation = ppt_app.Presentations.Add()
###
# 設定為 False 以隱藏 PowerPoint 視窗
ppt_app = win32com.client.Dispatch("PowerPoint.Application")
ppt_app.Visible = False
# 打開一個現有的簡報
presentation_path = "C:\\path\\to\\your\\presentation.pptx"
presentation = ppt_app.Presentations.Open(presentation_path, WithWindow=False)
###
# 檔案路徑
image1_path = "C:\\path\\to\\your\\image1.jpg"
image2_path = "C:\\path\\to\\your\\image2.jpg"
# 取得投影片尺寸
slide_width = presentation.PageSetup.SlideWidth
slide_height = presentation.PageSetup.SlideHeight
# 定義函數來插入圖片到新幻燈片
def add_image_slide(presentation, image_path=None):
slide = presentation.Slides.Add(len(presentation.Slides) + 1, 1)
if image_path:
slide.Shapes.AddPicture(FileName=image_path, LinkToFile=False, SaveWithDocument=True, Left=100, Top=100, Width=-1, Height=-1)
else:
slide.Shapes.Paste()
# 插入第一張圖片來自檔案
add_image_slide(presentation, image1_path)
# 插入第二張圖片來自剪貼簿
add_image_slide(presentation)
# 插入第三張圖片來自檔案
add_image_slide(presentation, image2_path)
# 保存簡報
output_path = "C:\\path\\to\\save\\your\\presentation.pptx"
presentation.SaveAs(output_path)
# 完全關閉 PowerPoint
presentation.Close()
ppt_app.Quit()
# 釋放 COM 物件
ppt_app = None
presentation = None
pythoncom.CoUninitialize()
1
Shapes.AddPicture(FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height)
"C:\\path\\to\\your\\image.jpg"
。True
,圖片將鏈接到源文件;如果為 False
,圖片將嵌入到簡報中。True
,圖片將與簡報一起保存;如果為 False
,圖片不會與簡報一起保存。這個參數僅在 LinkToFile
為 True
時有效。-1
,將按圖片的原始寬度插入。-1
,將按圖片的原始高度插入。Shapes.AddPicture
方法返回一個 Shape
對象,表示新插入的圖片。
Presentations.Open(FileName, ReadOnly, Untitled, WithWindow)
"C:\\path\\to\\your\\presentation.pptx"
。True
,簡報將以只讀模式打開;如果為 False
,簡報將以可編輯模式打開。True
,簡報將作為無標題文件打開;如果為 False
,簡報將以其現有標題打開。通常這個參數設為 False
。True
,簡報將顯示在 PowerPoint 應用程式窗口中;如果為 False
,簡報將在後台打開而不顯示窗口。Presentations.Open
方法返回一個 Presentation
對象,表示打開的簡報。
Presentations.Add(WithWindow)
True
,簡報將顯示在 PowerPoint 應用程式窗口中;如果為 False
,簡報將在後台打開而不顯示窗口。Presentations.Add
方法返回一個 Presentation
對象,表示新建的簡報。