drag and drop - कैसे खींचें और एक QTableWidget में ड्रॉप?(PyQT)



drag-and-drop (1)

चूंकि आप एक क्यूटेबलविजेट पर ड्रैग एंड ड्रॉप सेट अप कर रहे हैं, इसलिए आपको ड्रैग मैवएवेंट को फिर से लागू करना dragMoveEventडॉक्स के अनुसार यहां :

उपवर्ग परिसर विजेट
कुछ मानक क्यूटी विगेट्स खींचें और ड्रॉप के लिए अपने समर्थन प्रदान करते हैं। इन विगेट्स को उप-क्लास करने पर, ड्रैगएनेटरएवेंट () और ड्रॉपएवेंट () के अलावा ड्रैगएववेईवेंट () को फिर से पूरक करने के लिए आवश्यक हो सकता है ताकि बेस क्लास को डिफॉल्ट ड्रैग और ड्रॉप हैंडलिंग प्रदान करने से रोक दिया जा सके,

class MyTable(QtGui.QTableWidget):
    ...
    def dragMoveEvent(self, e):
        e.accept()

साथ ही, ध्यान रखें कि जब मूल ट्यूटोरियल दिखाता है कि किसी भी लेआउट के बिना किसी विजेट के बटन को कैसे ले जाना है, तो आपके उदाहरण में अब एक लंबवत लेआउट द्वारा प्रबंधित बटन है। तो आपका self.button.move(position) अपेक्षा के अनुरूप काम नहीं करेगा यद्यपि dropEvent को ठीक से आग dropEvent चाहिए और जब आप सेल स्वीकार करते हैं तो आपको "स्वीकृत" खींचें आइकन प्राप्त करना चाहिए।

मैं ड्रैग और ड्रॉप काम करने के लिए संघर्ष कर रहा हूं मैं QTushView से एक क्यूपशबूटन के सेल में ड्रैग एंड ड्रॉप करने में सक्षम होना चाहता हूं। मैंने कुछ ट्यूटोरियल ऑनलाइन देखे हैं लेकिन पहले चरण में फंस गए हैं। नीचे दिए गए उदाहरण अद्भुत zetcode ट्यूटोरियल से बदल दिया गया है: http://zetcode.com/tutorials/pyqt4/dragdrop/

नीचे दिए गए कोड का इस्तेमाल करते हुए, जब मैं बटन को टेबल में विन्डॉग में खींचता हूं, ड्रैगएन्टरइवेंट को बुलाया जाता है, लेकिन एक बार जब मैं माउस को मेज पर हॉवर कर देता हूं, तो मुझे वह प्रतीक मिलता है जो मुझे मेज पर छोड़ने की इजाजत नहीं है, इसलिए ड्रॉप इवेंट पर जाएं :(

मुझे यह स्वीकार करना होगा कि मैं काफी हद तक नया हूँ, इसलिए कुछ बहुत ही आसान हो सकता है। वास्तव में मैं किसी भी मदद की सराहना कर सकता हूँ! चीयर्स डेव

import sys
from PyQt4 import QtGui
from PyQt4 import QtCore


class Button(QtGui.QPushButton):

    def __init__(self, title, parent):
        super(Button, self).__init__(title, parent)


    def mouseMoveEvent(self, e):
        if e.buttons() != QtCore.Qt.RightButton:
            return

        mimeData = QtCore.QMimeData()
        drag = QtGui.QDrag(self)
        drag.setMimeData(mimeData)
        drag.setHotSpot(e.pos() - self.rect().topLeft())

       dropAction = drag.start(QtCore.Qt.MoveAction)


    def mousePressEvent(self, e):

        QtGui.QPushButton.mousePressEvent(self, e)
        if e.button() == QtCore.Qt.LeftButton:
            print 'press'


class MyTable(QtGui.QTableWidget):

    def __init__(self, rows, columns, parent):
        super(MyTable, self).__init__(rows, columns, parent)
        self.setAcceptDrops(True)

    def dragEnterEvent(self, e):
        print e.accept()

    def dropEvent(self, e):
        print 'blah'

        position = e.pos()
        self.button.move(position)

        e.setDropAction(QtCore.Qt.MoveAction)

        e.accept()



class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()

    def initUI(self):
        self.setAcceptDrops(True)
        self.button = Button('Button', self)

        self.table = MyTable(2,2,self)
        self.table.setAcceptDrops(True)
        self.table.setDragEnabled(True)

        self.setWindowTitle('Click or Move')

        self.setGeometry(300, 300, 280, 150)

        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.button)
        layout.addWidget(self.table)
        self.setLayout(layout)


def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    app.exec_()  


if __name__ == '__main__':

    main()