好吧,我在QtDesigner中放置了一个表格部件;然后我以编程方式尝试添加一个由标签和行编辑组成的部件作为该表格中的一个单元格。
正如你从截图中可以看到的那样。
......标签似乎在单元格中垂直居中--但行编辑的位置很靠下,实际上已经超出了单元格的范围。
我怎样才能让行编辑在单元格中垂直对齐--与标签一样?或者更准确地说,我怎样才能让行编辑内的文本与标签内的文本一样大小和对齐?
test.ui
:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QHBoxLayout" name="horizontalLayout">
<widget class="QTableWidget" name="tableWidget">
<column>
<property name="text">
<string>Hello</string>
</property>
</column>
<column>
<property name="text">
<string>World</string>
</property>
</column>
</widget>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<x>0</x>
<y>0</y>
<width>400</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
test.py
import sys
from PyQt5 import QtCore, QtWidgets, QtGui, uic
from PyQt5.QtCore import pyqtSlot
class MyMainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MyMainWindow, self).__init__()
uic.loadUi('test.ui', self)
QtCore.QTimer.singleShot(1, self.delayed_init)
self.show()
def delayed_init(self):
# stretch the column widths manually - must be in delayed_init, in __init__ table does not yet know its own width
numcols = self.tableWidget.columnCount()
newcolwidth = int( self.tableWidget.width()/numcols )
for i in range(numcols):
self.tableWidget.setColumnWidth(i, newcolwidth) # SO:46715061
# test - add cell
self.tableWidget.setRowCount(2)
linewidget = QtWidgets.QWidget(self.tableWidget)
linelayout = QtWidgets.QHBoxLayout()
linewidget.setLayout(linelayout)
linelbl1 = QtWidgets.QLabel()
linelbl1.setText("Hello ")
lineedit = QtWidgets.QLineEdit(linewidget)
lineedit.setSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Expanding)
lineedit.setMinimumHeight( self.tableWidget.verticalHeader().minimumSectionSize() + 10 )
lineedit.setMaximumWidth( 30 )
lineedit.setMaxLength( 3 ) # 3 characters
linelbl2 = QtWidgets.QLabel()
linelbl2.setText(" buddy")
linelayout.addWidget(linelbl1)
linelayout.addWidget(lineedit, QtCore.Qt.AlignCenter)
linelayout.addWidget(linelbl2)
self.tableWidget.setCellWidget(0, 1, linewidget)
def main():
app = QtWidgets.QApplication(sys.argv)
window = MyMainWindow()
sys.exit(app.exec_())
if __name__ == "__main__":
main()