صابر مغترب نشر 12 يوليو أرسل تقرير نشر 12 يوليو (معدل) اريد عندما ادخل اي قيمه في اعمدة اسهم الورثه يتحدث المجموع تلقائيا والذي يجمع اسهم الورثه 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()) تم التعديل في 12 يوليو بواسطة Mustafa Suleiman تنسيق الكود 1 اقتباس
0 Mustafa Suleiman نشر 12 يوليو أرسل تقرير نشر 12 يوليو تتوفر إشارة 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) اقتباس
0 صابر مغترب نشر 21 يوليو الكاتب أرسل تقرير نشر 21 يوليو ممكن استاذي تعطني التعديل مع كامل المثال اقتباس
السؤال
صابر مغترب
اريد عندما ادخل اي قيمه في اعمدة اسهم الورثه يتحدث المجموع تلقائيا والذي يجمع اسهم الورثه
تنسيق الكود
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.