setMaximWidth을 사용하여 세로 머리글의 크기를 모으고 setTextElideMode을 사용하여 텍스트가 잘리는 방식을 조정하십시오.
그러나 사용자가 크기를 조정할 수있는 세로 헤더 너비를 만드는 기본 제공 방법은 없습니다. 해결 방법으로 크기 조정 이벤트를 사용하여 세로 너비의 너비를 전체 너비의 백분율로 조정할 수 있습니다. 그런 식으로 창 크기를 조정하면 세로 머리글의 너비가 변경됩니다.
import sys
from PyQt4 import QtCore, QtGui
class Window(QtGui.QWidget):
def __init__(self, rows, columns):
super(Window, self).__init__()
self.table = QtGui.QTableView(self)
self.table.installEventFilter(self)
self.table.verticalHeader().setTextElideMode(QtCore.Qt.ElideRight)
model = QtGui.QStandardItemModel(rows, columns, self.table)
for row in range(rows):
item = QtGui.QStandardItem('FOO_BAR_123_AB_CD_%s' % row)
model.setVerticalHeaderItem(row, item)
for column in range(columns):
item = QtGui.QStandardItem('(%d, %d)' % (row, column))
item.setTextAlignment(QtCore.Qt.AlignCenter)
model.setItem(row, column, item)
self.table.setModel(model)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.table)
def eventFilter(self, source, event):
if event.type() == QtCore.QEvent.Resize and source is self.table:
source.verticalHeader().setMaximumWidth(source.width()/4)
return super(Window, self).eventFilter(source, event)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = Window(15, 5)
window.setGeometry(600, 100, 400, 300)
window.show()
sys.exit(app.exec_())
UPDATE :
내가 수직 헤더 폭의 사용자 크기 조정을 구현하는 사용자 정의 헤더 클래스를 작성에서 이동을 한 다음
는 모두를 구현하는 데모 스크립트입니다. 그것은
거의 작동하지만 마우스로 드래그하는 동안 뷰를 올바르게 업데이트하는 방법을 찾을 수 없습니다. 어쨌든, 여기 그것이 작동하는 방법을 볼 수 있습니다 나는 경우 사람이 지금까지 가지고있는 데모입니다
import sys
from PyQt4 import QtCore, QtGui
class HeaderView(QtGui.QHeaderView):
def __init__(self, table):
super(HeaderView, self).__init__(QtCore.Qt.Horizontal, table)
self.setClickable(True)
self.setHighlightSections(True)
self.setResizeMode(QtGui.QHeaderView.Interactive)
self._vheader = table.verticalHeader()
self._resizing = False
self._start_position = -1
self._start_width = -1
def mouseMoveEvent(self, event):
if self._resizing:
width = event.x() - self._start_position + self._start_width
if width > 0:
self._vheader.setFixedWidth(width)
# TODO: find a proper replacement for this
self.geometriesChanged.emit()
else:
super(HeaderView, self).mouseMoveEvent(event)
if 0 <= event.x() <= 3:
if not self.testAttribute(QtCore.Qt.WA_SetCursor):
self.setCursor(QtCore.Qt.SplitHCursor)
def mousePressEvent(self, event):
if not self._resizing and event.button() == QtCore.Qt.LeftButton:
if 0 <= event.x() <= 3:
self._start_position = event.x()
self._start_width = self._vheader.width()
self._resizing = True
return
super(HeaderView, self).mousePressEvent(event)
def mouseReleaseEvent(self, event):
self._resizing = False
super(HeaderView, self).mouseReleaseEvent(event)
class Window(QtGui.QWidget):
def __init__(self, rows, columns):
super(Window, self).__init__()
self.table = QtGui.QTableView(self)
self.table.setHorizontalHeader(HeaderView(self.table))
self.table.verticalHeader().setTextElideMode(QtCore.Qt.ElideRight)
model = QtGui.QStandardItemModel(rows, columns, self.table)
for row in range(rows):
item = QtGui.QStandardItem('FOO_BAR_123_AB_CD_%s' % row)
item.setToolTip(item.text())
model.setVerticalHeaderItem(row, item)
for column in range(columns):
item = QtGui.QStandardItem('(%d, %d)' % (row, column))
item.setTextAlignment(QtCore.Qt.AlignCenter)
model.setItem(row, column, item)
self.table.setModel(model)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.table)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = Window(15, 5)
window.setGeometry(600, 100, 400, 300)
window.show()
sys.exit(app.exec_())
Qt 디자이너를 사용해 보셨습니까? – Ronikos
죄송합니다.이 책을 처음 접하십니까? Qt Designer는 어떻게 사용합니까? – learncode
Qt Designer를 사용하면 드래그 앤 드롭 요소를 사용하여 UI를 만들 수 있습니다. 수동으로 UI를 코딩하는 것보다 사용하기가 훨씬 쉽고 코드가 정리됩니다. 이 프로젝트가 큰 경우 Qt 디자이너로 전환하는 것이 좋습니다. 일부 작업은 명시 적으로 코딩해야하지만 아이러니하게도 그 중 하나입니다 – Ronikos