جمعه, 14 مهر 1402 11:57

افزودن یک یا چند ویجت به سلول جدول در پایتون و پایکیوت

هنگام ساخت برنامه مدیریت وام قرض الحسنه آرمان با پایتون و پایکیوت (Pyside6)، به جایی رسیدم که یک جدول توی برنامه نشون داده میشد و تمام اعضا با مشخصاتشون رو لیست میکرد و من میخواستم در فیلد آخر هر ردیف، ۳ تا دکمه برای نمایش، ویرایش و حذف داشته باشه. اینطوری:

پایتون و افزودن ویجت به سلول جدول در پایکیوت PySide6

و دستورات به شکل زیر هستند:

rows = cursor.execute("""
           SELECT shenase, fname || ' ' || lname AS full_name,
           join_date,membership_fee FROM users;
           """).fetchall()

for i, row in enumerate(rows):
    for j, field in enumerate(row):
        item = QTableWidgetItem(str(field))
        self.tableWidget.setItem(i, j, item)
        if j == 3:
           layout = QHBoxLayout()
           layout.setContentsMargins(0,0,0,0)
           layout.setSpacing(0

           layout.addWidget(QPushButton('Edit'))
           layout.addWidget(QPushButton('Delete'))
           layout.addWidget(QPushButton('View'))
cellWidget = QWidget() cellWidget.setLayout(layout)
self.tableWidget.setCellWidget(i, 4, cellWidget)

خب یک توضیح کوچکی درباره کدها بدم:

خط ۱ تا ۴ از جدول users که در پایگاه داده sqlite ساختمش، اطلاعات کل اعضا رو می‌گیرم و در متغیر rows ذخیره میکنم.

خط ۶ برای نمایش ردیف‌هاست.

خط ۷ برای نمایش فیلدهای (سلول‌) هر ردیف هست.

خط ۸ و ۹ برای قراردادن محتوای هر فیلد هست.

خط ۱۰ تا ۲۰ برای نمایش فیلد چهارم هر ردیف هست که داخل هر فیلد ۳ دکمه از نوع QPushButton در نظر گرفتم برای Edit, View, Delete. یعنی ابتدا یک لایه افقی QHBoxLayout در نظر گرفتم و سپس این ۳ دکمه رو بهش اضافه کردم و در نهایت این لایه رو به عنوان یک ویجت به سلول مورد نظرم اضافه کردم.

لازمه که ذکر کنم، از اونجایی که متد .setCellWidget() فقط یک ویجت رو به عنوان ورودی می‌پذیره! پس من مجبورم برای افزودن ۳ دکمه که ۳ ویجت محسوب میشن، این ۳ تا رو درون یک ویجت (مثل QHBoxLayout) بزارم و در نهایت اون یک ویجت (QHboxLayout) رو بهش بدم.

اگر سوالی دارین از قسمت نظرات در پایین همین نوشته بپرسید تا جای ممکن که در توانم باشه پاسخ میدم.

دیدگاه شما