اذهب إلى المحتوى

السؤال

نشر (معدل)

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

import sys
import traceback
from PyQt6.QtWidgets import QApplication, QMainWindow, QTableWidget, QVBoxLayout, QWidget, QTableWidgetItem, QLineEdit, QPushButton, QHBoxLayout
from PyQt6.QtCore import Qt
from PyQt6.QtGui import QColor

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle('التطبيق')
        self.setGeometry(100, 30, 1250, 700)       
        
        # إنشاء حقل الإدخال وزر الإدخال
        self.input_field = QLineEdit(self)
        self.input_field.setPlaceholderText('أدخل عدد الورثة')
        self.input_button = QPushButton('إضافة الورثة', self)
        self.input_button.clicked.connect(self.add_inheritors)

        input_layout = QHBoxLayout()
        input_layout.addWidget(self.input_field)
        input_layout.addWidget(self.input_button)

        # إنشاء الجدول
        self.table = QTableWidget(self)
        self.table.setColumnCount(5)  # عدد الأعمدة الافتراضي
        self.table.setHorizontalHeaderLabels([
            'اسم الورث', 'اسم موضع التركه', 
            'سعر الموضع', 'الاتصال', 
            'ملاحظه'
        ])

        self.table.setLayoutDirection(Qt.LayoutDirection.RightToLeft)

        table_layout = QVBoxLayout()
        table_layout.addLayout(input_layout)
        table_layout.addWidget(self.table)            

        # إنشاء واجهة مركزية وتعيين التخطيط لها
        centralWidget = QWidget()
        centralWidget.setLayout(table_layout)
        self.setCentralWidget(centralWidget)

        # إضافة صف جديد وتحريك المؤشر إلى الخلية الأولى
        self.add_new_row()
        self.table.setCurrentCell(0, 0)
        self.table.edit(self.table.currentIndex())  # بدء التحرير مباشرة

        # إعادة تعريف keyPressEvent للتحكم في سلوك الضغط على الأزرار
        self.table.keyPressEvent = self.table_keyPressEvent

    def add_new_row(self):
        current_row_count = self.table.rowCount()
        self.table.setRowCount(current_row_count + 1)

        for col in range(self.table.columnCount()):
            item = QTableWidgetItem()
            self.align_text_center(item)
            if col >= 5:  # الأعمدة الجديدة الخاصة بالورثة
                item.setBackground(QColor('yellow'))  # لون الخلفية
                item.setText('0.00')  # القيمة الافتراضية
            self.table.setItem(current_row_count, col, item)

    def align_text_center(self, item):
        if item is not None:
            item.setTextAlignment(Qt.AlignmentFlag.AlignCenter)

    def table_keyPressEvent(self, event):
        if event.key() == Qt.Key.Key_Return or event.key() == Qt.Key.Key_Enter:
            self.add_new_row()
            self.table.setCurrentCell(self.table.rowCount() - 1, 0)
        else:
            QTableWidget.keyPressEvent(self.table, event)

    def add_inheritors(self):
        try:
            num_inheritors = int(self.input_field.text())
            current_columns = self.table.columnCount()
            default_columns = 5
            
            # التحقق من وجود أعمدة الورثة واستبدالها
            if current_columns > default_columns:
                self.table.setColumnCount(default_columns)
                current_columns = default_columns
            
            self.table.setColumnCount(current_columns + num_inheritors + 2)  # اضافة 2 اعمده

            for i in range(num_inheritors):
                column_header = QTableWidgetItem(f'سهم الوراث {i + 1}')
                self.align_text_center(column_header)
                self.table.setHorizontalHeaderItem(current_columns + i, column_header)
                
                for row in range(self.table.rowCount()):
                    item = QTableWidgetItem('0.00')
                    item.setBackground(QColor('yellow'))  # لون الخلفية
                    self.align_text_center(item)
                    self.table.setItem(row, current_columns + i, item)
            
            # إضافة أعمدة الجمع والتفقيط ونصيب الورث
            column_headers = ['المجموع للاسهم', 'التفقيط']
            for idx, header in enumerate(column_headers):
                column_item = QTableWidgetItem(header)
                self.align_text_center(column_item)
                self.table.setHorizontalHeaderItem(current_columns + num_inheritors + idx, column_item)
                
                for row in range(self.table.rowCount()):
                    item = QTableWidgetItem('0.00')
                    item.setBackground(QColor('yellow'))  # لون الخلفية
                    self.align_text_center(item)
                    self.table.setItem(row, current_columns + num_inheritors + idx, item)

            self.input_field.clear()
        except ValueError:
            self.input_field.setText('الرجاء إدخال عدد صحيح')
  
def exception_hook(type, value, tb):
    print("Unhandled Exception:")
    print(f"Type: {type.__name__}")
    print(f"Value: {value}")
    print("Traceback:")
    traceback.print_tb(tb)

if __name__ == "__main__":
    sys.excepthook = exception_hook  # تعيين الدالة exception_hook كـ excepthook
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

 

تم التعديل في بواسطة Mustafa Suleiman
تنسيق الكود

Recommended Posts

  • 0
نشر

تتوفر إشارة itemChanged الخاصة بـ QTableWidget لتتبع التغييرات في خلايا الجدول، وعليك إضافة دالة لحساب المجموع وتحديث العمود الخاص بالمجموع.

أي أولاً ربط إشارة itemChanged الخاصة بـ QTableWidget بدالة لحساب المجموع:

self.table.itemChanged.connect(self.update_totals)

ودالة update_totals لحساب المجموع:

def update_totals(self, item):
    if item.column() >= 5 and 'سهم الوراث' in self.table.horizontalHeaderItem(item.column()).text():
        row = item.row()
        num_inheritors = sum(1 for col in range(self.table.columnCount()) if 'سهم الوراث' in self.table.horizontalHeaderItem(col).text())
        sum_column = 5 + num_inheritors
        
        total_sum = 0.0
        for col in range(5, 5 + num_inheritors):
            try:
                total_sum += float(self.table.item(row, col).text())
            except ValueError:
                pass
        
        total_item = self.table.item(row, sum_column)
        if total_item is None:
            total_item = QTableWidgetItem('0.00')
            self.align_text_center(total_item)
            self.table.setItem(row, sum_column, total_item)
        total_item.setText(f'{total_sum:.2f}')

ثم إضافة أعمدة المجموع للأسهم والتفقيط في دالة add_inheritors:

column_headers = ['المجموع للأسهم', 'التفقيط']
for idx, header in enumerate(column_headers):
    column_item = QTableWidgetItem(header)
    self.align_text_center(column_item)
    self.table.setHorizontalHeaderItem(current_columns + num_inheritors + idx, column_item)
    
    for row in range(self.table.rowCount()):
        item = QTableWidgetItem('0.00')
        item.setBackground(QColor('yellow')) 
        self.align_text_center(item)
        self.table.setItem(row, current_columns + num_inheritors + idx, item)

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...