سه شنبه, 18 مهر 1402 05:58

وسط چین کردن (alignmet) یک یا چند ستون جدول کیوت در پایتون

خب اینجا قراره بگم چطور ترازبندی (وسط‌چین، چپ‌چین، راست‌چین) ستون‌های یک جدول رو در پایتون که با Qt Designer و PySide ساخته شدن انجام بدیم.

قبلش اینو بگم که اگر قرار باشه فقط یک سلول از جدول رو ترازبندی کنیم کافیه که از متد setTextAlignment برای item استفاده کنیم. اینطوری:

  item = QTableWidgetItem(str(field))
  self.tableWidget.setItem(i, j, item)
  item.setTextAlignment(Qt.AlignHCenter)
اینجا ما یک عنصر به نام item ساختیم که اون رو در ردیفi و ستونj از جدول tableWidget قرار دادیم و بعد هم در خط ۳ ترازش رو وسط چین می‌کنیم.
اما مشکل اینجاست که اگر بخوایم کل یک ستون یا چند ستون یا حتی همه‌ی ستون‌های جدول رو از این طریق ترازبندی کنیم، زیاد منطقی بنظر نمیاد که بعد از ایجاد هر سلول اون رو وسط چینش کنیم! و درست‌تر اینه که یک دفعه تمام ستون یا ستون‌ها رو ترازبندی کنیم.
خب حالا چطوری همه‌ی ستون رو ترازبندی کنیم؟!
برای ترازبندی یک دفعه‌ای یک یا چند ستون باید از متد delegate استفاده کنیم. یعنی اول یک کلاس که از کلاس QStyledItemDelegate ارث بری کرده تعریف میکنیم:
 
 from PySide6 import QtCore, QtWidgets

 class AlignDelegate(QtWidgets.QStyledItemDelegate):
     def initStyleOption(self, option, index):
         super(AlignDelegate, self).initStyleOption(option, index)
         option.displayAlignment = QtCore.Qt.AlignCenter
حالا میتونیم با دستور زیر مثلا ستون شماره ۲ جدول tableWidget رو وسط چین کنیم:
  delegate = AlignDelegate(self.tableWidget)  
  self.tableWidget.setItemDelegateForColumn(2, delegate)
و اگر بخوام کل ستون‌ها رو یک دفعه وسط چین کنم باید بنویسم:
  self.tableWidget.setItemDelegate(delegate)
این بود انشای من درباره ترازبندی و وسط چین کردن ستون در جدول های کیوت (PySide و PyQt) در پایتون!
اگر سوالی دارید از قسمت پایین (نظرات) میتونید بپرسید.

دیدگاه شما