Python PyQt5表格行高
在阅读了一些类似的文章之后,我仍然在努力使用PyQt5和Python3.8创建一个可以控制行高的表。 上面的图像是从下面的代码中捕获的。这些行间隔很宽,因此我可以显示的信息比tkinter的Treeview之类的类似表少得多。行大小默认为25像素,我找不到缩小它的方法 通常的resizerWSToContents和setRowHeight似乎没有任何作用。我该如何解决这个问题 下面是添加每行的例程: 加载角色表的一行 下面是创建表的主要代码:Python PyQt5表格行高,python,pyqt5,qtablewidget,Python,Pyqt5,Qtablewidget,在阅读了一些类似的文章之后,我仍然在努力使用PyQt5和Python3.8创建一个可以控制行高的表。 上面的图像是从下面的代码中捕获的。这些行间隔很宽,因此我可以显示的信息比tkinter的Treeview之类的类似表少得多。行大小默认为25像素,我找不到缩小它的方法 通常的resizerWSToContents和setRowHeight似乎没有任何作用。我该如何解决这个问题 下面是添加每行的例程: 加载角色表的一行 下面是创建表的主要代码: def build(self): self
def build(self):
self.setGeometry(300, 300, 500, 500) #set up window
self.setWindowTitle('Cast list')
grid = QGridLayout() # and layout
# create an empty 3-column table, no grid lines or vertical header
self.castTable = QTableWidget(0, 3, self)
self.castTable.verticalHeader().setVisible(False)
self.castTable.setShowGrid(False)
# table headers
grid.addWidget(self.castTable, 0, 0, 5, 1)
columns = ["Frname", "Lname", "Role"]
self.castTable.setHorizontalHeaderLabels(columns)
# self.castTable.horizontalHeader().font()
# column widths
self.castTable.setColumnWidth(0, 100)
self.castTable.setColumnWidth(1, 150)
self.castTable.setColumnWidth(2, 175)
# add 3 rows
names = ["Edwin", "Rodridguez", "Marco"]
self.loadTable(0, names)
names = ["Mike", "Costantino", "Guiseppe"]
self.loadTable(1, names)
names = ["John", "Matilaine", "Don Alhambra"]
self.loadTable(2, names)
# set the layout and show the table
self.setLayout(grid)
self.show()
试试看:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
class MainWindow(QWidget):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setGeometry(700, 200, 500, 500) #set up window
self.setWindowTitle('Cast list')
grid = QGridLayout() # and layout
# create an empty 3-column table, no grid lines or vertical header
self.castTable = QTableWidget(0, 3, self)
# self.castTable.verticalHeader().setVisible(False) #
self.castTable.setShowGrid(False)
# table headers
grid.addWidget(self.castTable, 0, 0, 5, 1)
columns = ["Frname", "Lname", "Role"]
self.castTable.setHorizontalHeaderLabels(columns)
# self.castTable.horizontalHeader().font()
# column widths
self.castTable.setColumnWidth(0, 100)
self.castTable.setColumnWidth(1, 150)
self.castTable.setColumnWidth(2, 175)
# add 3 rows
names = ["Edwin", "Rodridguez", "Marco"]
self.loadTable(0, names)
names = ["Mike", "Costantino", "Guiseppe"]
self.loadTable(1, names)
names = ["John", "Matilaine", "Don Alhambra"]
self.loadTable(2, names)
# set the layout and show the table
self.setLayout(grid)
for row in range(self.castTable.rowCount()): #
print(f'row={row}, rowHeight={self.castTable.rowHeight(row)}') #
def loadTable(self, row, names):
row = self.castTable.rowCount()
riter = iter(names)
self.castTable.insertRow(row)
#self.castTable.verticalHeader().setDefaultSectionSize(8)
self.castTable.setItem(row, 0, QTableWidgetItem(next(riter)))
self.castTable.setItem(row, 1, QTableWidgetItem(next(riter)))
self.castTable.setItem(row, 2, QTableWidgetItem(next(riter)))
print(f'row = {(row+2) * 8}') #
self.castTable.setRowHeight(row, (row+2) * 8) # +++
# setRowHeight
# self.castTable.resizeRowsToContents() # ---
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle('Fusion') # +++
Form = MainWindow()
Form.show()
sys.exit(app.exec_())
是的,就是这样。似乎setStyle(‘Fusion’)和setRowHeight语句都很关键。谢谢大家!@James如果我的回答对你有帮助,那么不要忘记标记为正确,如果你不知道如何做,那么检查我刚刚发现,你可以使用QTreeView,在没有所有这些操作的情况下获得相同的间距。谢谢
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
class MainWindow(QWidget):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setGeometry(700, 200, 500, 500) #set up window
self.setWindowTitle('Cast list')
grid = QGridLayout() # and layout
# create an empty 3-column table, no grid lines or vertical header
self.castTable = QTableWidget(0, 3, self)
# self.castTable.verticalHeader().setVisible(False) #
self.castTable.setShowGrid(False)
# table headers
grid.addWidget(self.castTable, 0, 0, 5, 1)
columns = ["Frname", "Lname", "Role"]
self.castTable.setHorizontalHeaderLabels(columns)
# self.castTable.horizontalHeader().font()
# column widths
self.castTable.setColumnWidth(0, 100)
self.castTable.setColumnWidth(1, 150)
self.castTable.setColumnWidth(2, 175)
# add 3 rows
names = ["Edwin", "Rodridguez", "Marco"]
self.loadTable(0, names)
names = ["Mike", "Costantino", "Guiseppe"]
self.loadTable(1, names)
names = ["John", "Matilaine", "Don Alhambra"]
self.loadTable(2, names)
# set the layout and show the table
self.setLayout(grid)
for row in range(self.castTable.rowCount()): #
print(f'row={row}, rowHeight={self.castTable.rowHeight(row)}') #
def loadTable(self, row, names):
row = self.castTable.rowCount()
riter = iter(names)
self.castTable.insertRow(row)
#self.castTable.verticalHeader().setDefaultSectionSize(8)
self.castTable.setItem(row, 0, QTableWidgetItem(next(riter)))
self.castTable.setItem(row, 1, QTableWidgetItem(next(riter)))
self.castTable.setItem(row, 2, QTableWidgetItem(next(riter)))
print(f'row = {(row+2) * 8}') #
self.castTable.setRowHeight(row, (row+2) * 8) # +++
# setRowHeight
# self.castTable.resizeRowsToContents() # ---
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle('Fusion') # +++
Form = MainWindow()
Form.show()
sys.exit(app.exec_())