2017-06-12 52 views
0

我有一個新的問題給你。我有2個QListWidget與許多項目。我想選擇多個項目,點擊一個按鈕,並在第二個QListWidget中剪切/粘貼,反之亦然。2 QListWidget如何交換許多項目?

有人知道我該怎麼做?

這是我發展的開始:

from PyQt5 import QtCore, QtGui, QtWidgets 
class Ui_MainWindow(object): 
def setupUi(self, MainWindow): 
    MainWindow.setObjectName("MainWindow") 
    MainWindow.resize(816, 603) 
    self.centralwidget = QtWidgets.QWidget(MainWindow) 
    self.centralwidget.setObjectName("centralwidget") 
    self.listWidget1 = QtWidgets.QListWidget(MainWindow) 
    self.listWidget1.setGeometry(QtCore.QRect(370, 120, 151, 311)) 
    self.listWidget1.setObjectName("listWidget1") 
    self.listWidget1.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection) 
    item = QtWidgets.QListWidgetItem() 
    self.listWidget1.addItem(item) 
    item = QtWidgets.QListWidgetItem() 
    self.listWidget1.addItem(item) 
    self.listWidget_2 = QtWidgets.QListWidget(MainWindow) 
    self.listWidget_2.setGeometry(QtCore.QRect(600, 120, 151, 311)) 
    self.listWidget_2.setObjectName("listWidget_2") 
    self.listWidget_2.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection) 
    self.pushButton_3 = QtWidgets.QPushButton(MainWindow) 
    self.pushButton_3.setGeometry(QtCore.QRect(540, 220, 51, 21)) 
    self.pushButton_3.setObjectName("pushButton_3") 
    self.pushButton_4 = QtWidgets.QPushButton(MainWindow) 
    self.pushButton_4.setGeometry(QtCore.QRect(540, 270, 51, 21)) 
    self.pushButton_4.setObjectName("pushButton_4") 
    self.retranslateUi(MainWindow) 
    QtCore.QMetaObject.connectSlotsByName(MainWindow) 
def retranslateUi(self, MainWindow): 
    _translate = QtCore.QCoreApplication.translate 
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 
    __sortingEnabled = self.listWidget1.isSortingEnabled() 
    self.listWidget1.setSortingEnabled(False) 
    item = self.listWidget1.item(0) 
    item.setText(_translate("MainWindow", "test1")) 
    item = self.listWidget1.item(1) 
    item.setText(_translate("MainWindow", "test2")) 
    self.listWidget1.setSortingEnabled(__sortingEnabled) 
    self.pushButton_3.setText(_translate("MainWindow", "-->")) 
    self.pushButton_4.setText(_translate("MainWindow", "<--")) 
if __name__ == "__main__": 
import sys 
app = QtWidgets.QApplication(sys.argv) 
MainWindow = QtWidgets.QMainWindow() 
ui = Ui_MainWindow() 
ui.setupUi(MainWindow) 
MainWindow.show() 
sys.exit(app.exec_()) 

回答

0

我只是找到了答案。如果有一天有人遇到同樣的問題,我把結果放在這裏。

我創建了一個新的fonction上的按鈕Iclicked時和使用3個fonctions: - selectedIndexes - takeItem(以從第一QListWidget刪除) - 的addItem(在第二QListWidget添加的項目)

def click_pushButton(self): 
# sort rows in descending order in order to compensate shifting due to takeItem 

    rows = sorted([index.row() for index in self.listWidget1.selectedIndexes()], 
       reverse=True) 
    print('AAA') 
    for row in rows: 
     # assuming the other listWidget is called listWidget_2 
     self.listWidget_2.addItem(self.listWidget1.takeItem(row))