آموزش کشیدن و رها کردن در PyQt

3 سال پیش

 آموزش کشیدن و رها کردن در 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 اضافه می شود.

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

 

کد بالا خروجی زیر را تولید می کند –

Drag and Drop Output

 

منبع.

 

لیست جلسات قبل آموزش PyQt

  1. آموزش PyQt
  2. آموزش مقدمه PyQt
  3. آموزش Hello World در PyQt
  4. آموزش کلاس های اصلی در PyQt
  5. آموزش استفاده از Qt Designer در PyQt
  6. آموزش سیگنال ها و شکاف ها در PyQt
  7. آموزش مدیریت طرح بندی در PyQt
  8. آموزش ویجت های کلی در PyQt
  9. آموزش کلاس QDialog در PyQt
  10. آموزش کلاس QMessageBox در PyQt
  11. آموزش رابط چندین سند در PyQt
0
برچسب ها :
نویسنده مطلب erfan molaei

دیدگاه شما

بدون دیدگاه