Python pyqt學習筆記 物件拖曳[Kurt]

2024/03/13閱讀時間約 6 分鐘
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

5會員
56內容數
ktest
留言0
查看全部
發表第一個留言支持創作者!