Я создаю виджет таблицы, который хочу автоматически обновлять через определенные промежутки времени.Проблема в том, что при обновлении содержимого таблицы происходит сброс их свойства rowHeight и игнорирование вызова setRowHeight ().
Например, у меня есть класс репитера, работающий в отдельном потоке:
class RepeatedTimer(QtCore.QThread):
def __init__(self, obj):
super(RepeatedTimer, self).__init__(obj)
self.obj = obj
self.stop = False
def run(self):
while not self.stop:
time.sleep(2)
self.obj.refresh()
и он используется в моем QTableWidget следующим образом:
from PySide import QtCore, QtGui
import sys, time
class TestTable(QtGui.QTableWidget):
def __init__(self, parent=None):
super(TestTable, self).__init__(parent)
self.setColumnCount(1)
self.thread = RepeatedTimer(self) # Create the auto-refresher thread
self.thread.start() # Start the thread
self.refresh()
def refresh(self):
print "Clearing table"
while self.rowCount():
self.removeRow(0)
for each in xrange(3):
self.insertRow(each)
text = str(time.time())
item = QtGui.QTableWidgetItem(text)
self.setItem(each, 0, item)
for row in xrange(self.rowCount()):
self.setRowHeight(row, 100) # This part is not behaving as expected
print 'Row %d height: %d' % (row, self.rowHeight(row))
def closeEvent(self, event):
print 'Stopping thread...'
self.thread.stop = True
self.thread.exit()
app = QtGui.QApplication(sys.argv)
test = TestTable()
test.show()
sys.exit(app.exec_())
Если вы запустите это, вы увидите, что каждый раз, когда таблица обновляется, она очищает все содержимое, добавляетновые элементы в каждой строке и устанавливает все высоты строк равными 100. За исключением этой последней части.Он правильно перебирает строки, потому что печатает каждый раз.Но по какой-то причине он перестает устанавливать высоту строк после первого цикла.
Есть идеи, почему это происходит?