قبلش اینو بگم که اگر قرار باشه فقط یک سلول از جدول رو ترازبندی کنیم کافیه که از متد 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) در پایتون!
اگر سوالی دارید از قسمت پایین (نظرات) میتونید بپرسید.