مارس 31، 2009

PyQt4: كيف يمكن نسخ العناصر المحددة من قائمة إلى أخرى


قمت مؤخرا بالبحث عن طريقة يمكن من خلالها نقل مجموعة من العناصر التي تم تحديدها من طرف المستخدم من قائمة إلى أخرى.

فكانت النتيجة على شكل البرنامج التالي :


يمكن تحميل الشفرة المصدرية من هنا.




#!/usr/bin/env python

# -*- coding: utf-8 -*-





## جزء خاص بتحديد الرخصة و حق الملكية

## Copyright (c) 2009 Mohammed Berdai stuntgp2000@gmail.com

## This program is free software; you can redistribute it and/or modify

## it under the terms of the GNU General Public License as published by

## the Free Software Foundation; either version 2 of the License, or

## (at your option) any later version.





## إيستدعاء للوحدات التي نحتاجها

import sys

from PyQt4 import QtGui, QtCore, uic





## إنشاء البرنامج على شكل قسم يشتق من الكائن (كيو ويدجت)ـ

class pylist(QtGui.QWidget):



    ## دالة بدء التشغيل

    def __init__(self, parent=None):

        ## تهيئة الكائن الأساسي و الواجهة الرسومية

        QtGui.QWidget.__init__(self, parent)

        uic.loadUi("main.ui", self)



        ## نداء على الدالة لتقوم بملء القائمة الأولى

        self.FillList()



        ## ربط حدث الضغط على كل زر بالدالة التي ستثمثل وظيفته

        self.connect(self.pbAdd, QtCore.SIGNAL("clicked()"), self.AddItem)

        self.connect(self.pbCount, QtCore.SIGNAL("clicked()"), self.Counter)

        self.connect(self.pbFill, QtCore.SIGNAL("clicked()"), self.FillList)

        self.connect(self.pbRemove, QtCore.SIGNAL("clicked()"), self.RemoveItem)

        self.connect(self.pbMove, QtCore.SIGNAL("clicked()"), self.MoveItem)

        self.connect(self.pbMoveSel, QtCore.SIGNAL("clicked()"), self.MoveSelItems)





    ## تقوم بنقل المحتوى النصي من إطار الكتابة إلى القائمة

    def AddItem(self):

        if self.lnEntry.text() <> "":

            s = self.lnEntry.text()

            self.List1.addItem(s)

            self.lnEntry.setText("")





    ## إظهار رسالة بعدد العناصر في كل قائمة

    def Counter(self):

        msg1 = "List one contains " + str(self.List1.count()) + " item(s)" + "\n"

        msg2 = "List Two contains " + str(self.List2.count()) + " item(s)"

        QtGui.QMessageBox.information(self, 'List Count', msg1 + msg2 , QtGui.QMessageBox.Ok)





    ## ملء القائمة ب10 عناصر عددية لتسهيل إختبار البرنامج

    def FillList(self):

        for x in range(10):

            self.List1.addItem(str(x))





    ## حدف العنصر الذي تم إختياره

    def RemoveItem(self):

        self.List1.takeItem(self.List1.currentRow())





    ## نسخ العنصر من القائمة الأولى إلى الثانية ثم حدفه من القائمة الأولى

    def MoveItem(self):

        self.List2.addItem(self.List1.currentItem().text())

        self.List1.takeItem(self.List1.currentRow())





    ## نسخ كل العناصر المحددة من القائمة الأولى إلى الثانية

    def MoveSelItems(self):

        ## بإستخدامة الائحة المعبرة عن ترتيب كل عنصر محدد في القائمة الأولى يمكن إستخدام الحلقة لنسخ العناصر

        while self.List1.selectedIndexes() <> []:

            x = self.List1.selectedIndexes()[0].row()

            self.List2.addItem(self.List1.item(x).text())

            self.List1.takeItem(x)







## هنا مذخل بداية البرنامج حيث يتم توظيف القسم و عرض الواجهة الرسومية

if __name__ == "__main__":

    app = QtGui.QApplication(sys.argv)

    mw = pylist()

    mw.show()

    sys.exit(app.exec_())


ليست هناك تعليقات:

إرسال تعليق