آموزش کشیدن و رها کردن در PyQt
آموزش کشیدن و رها کردن در PyQt
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش کشیدن و رها کردن در PyQt خواهیم پرداخت.
پیشنهاد ویژه : پکیج آموزش طراحی وب سایت با پایتون
ارائه کشیدن و رها کردن (دراگ اند دراپ) برای کاربر بسیار بصری است. در بسیاری از برنامه های رومیزی یافت می شود که در آن کاربر می تواند اشیاء را از یک پنجره به پنجره دیگر منتقل کند.
انتقال داده بر اساس کشیدن و رها کردن بر اساس کلاس QDrag است. اشیاء QMimeData داده ها را با نوع MIME مربوطه مرتبط می کنند. در کلیپ بورد ذخیره می شود و سپس در فرایند کشیدن و رها کردن استفاده می شود.
توابع کلاس QMimeData زیر اجازه می دهد تا نوع MIME شناسایی و به راحتی استفاده شود.
Tester | Getter | Setter | MIME Types |
---|---|---|---|
hasText() | text() | setText() | text/plain |
hasHtml() | html() | setHtml() | text/html |
hasUrls() | urls() | setUrls() | text/uri-list |
hasImage() | imageData() | setImageData() | image/ * |
hasColor() | colorData() | setColorData() | application/x-color |
بسیاری از اشیاء QWidget از فعالیت کشیدن و رها کردن پشتیبانی می کنند. آنهایی که اجازه کشیدن داده های خود را می دهند ، ()setDragEnabled را دارند که باید روی true تنظیم شود. از طرف دیگر ، ویجت ها باید به رویدادهای کشیدن و رها کردن پاسخ دهند تا داده های کشیده شده در آنها ذخیره شود.
- DragEnterEvent یک رویداد را فراهم می کند که با ورود عملیات کشیدن به ویجت مورد نظر ارسال می شود.
- DragMoveEvent هنگامی استفاده می شود که عملیات کشیدن و رها کردن در حال انجام است.
- DragLeaveEvent هنگامی که عمل کشیدن و رها کردن ویجت ایجاد می شود، ایجاد می شود.
از سوی دیگر، DropEvent هنگامی رخ می دهد که رها کردن کامل شود. اقدام پیشنهادی رویداد را می توان به صورت مشروط پذیرفت یا رد کرد.
مثال
در کد زیر DragEnterEvent تأیید می کند که آیا داده های MIME رویداد دارای متن هستند یا خیر. اگر بله، اقدام پیشنهادی رویداد پذیرفته می شود و متن به عنوان یک مورد جدید در ComboBox اضافه می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
import sys from PyQt4.QtGui import * from PyQt4.QtCore 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("Type some text in textbox and drag it into combo box")) edit = QLineEdit() edit.setDragEnabled(True) com = combo("Button", self) lo.addRow(edit,com) self.setLayout(lo) self.setWindowTitle('Simple drag & drop') def main(): app = QApplication(sys.argv) ex = Example() ex.show() app.exec_() if __name__ == '__main__': main() |
کد بالا خروجی زیر را تولید می کند –
دیدگاه شما