我有一个主窗口,其中包含一个设置了垂直布局的主小部件。在布局中只添加了一个QTableWidget
(暂时)。
当我启动应用程序并在main_window上调用show时,只显示了QTableWidget
的一部分。我可以手动扩展窗口以查看所有内容,但我希望窗口的大小能很好地适应QTableWidget
的大小。
在谷歌上搜索这个问题,发现了很多关于如何将大小调整为任意大小的帖子,调用resize(int)
工作得很好,但这并不是我想问的
许多其他帖子不够明确,例如“使用sizePolicy”或“使用frameGeometry
”或“使用几何”或“使用sizeHint
”。我相信他们可能都是对的,但是一个关于如何做到这一点的例子将是非常棒的。
发布于 2016-01-07 02:42:08
在布局中放置所需的所有元素后,您可以在MainWindow
中执行以下操作:
self.setFixedSize(self.layout.sizeHint())
这会将MainWindow
的大小设置为布局的大小,该大小是使用布局中排列的小部件的大小计算得出的。
发布于 2016-12-06 13:16:54
我认为在QTableWidget上覆盖sizeHint()是关键:
import sys
from PyQt5.QtCore import QSize
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget
class Table(QTableWidget):
def sizeHint(self):
horizontal = self.horizontalHeader()
vertical = self.verticalHeader()
frame = self.frameWidth() * 2
return QSize(horizontal.length() + vertical.width() + frame,
vertical.length() + horizontal.height() + frame)
class Main(QMainWindow):
def __init__(self, parent=None):
super(Main, self).__init__(parent)
top = Table(3, 5, self)
self.setCentralWidget(top)
if __name__ == '__main__':
app = QApplication(sys.argv)
main = Main()
main.show()
sys.exit(app.exec_())
发布于 2020-09-10 22:55:47
老了,但我有一段时间经历了这一点,并看到这里的答案对我来说并不完全有效。
下面是我所做的:
请确保正确设置了'mainwindow‘的中心小部件,并且布局的父部件是中心小部件,然后根据需要设置主窗口/小部件的大小策略。
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class RandomWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(RandomWidget, self).__init__(parent)
self.layout = QtWidgets.QVBoxLayout()
self.setLayout(self.layout)
self.ui()
self.layout.addWidget(self.table)
self.layout.addWidget(self.table2)
def ui(self):
self.table = QtWidgets.QTableWidget()
self.table.setMinimumSize(800,200)
self.table2 = QtWidgets.QTableWidget()
class Mainwindow(QtWidgets.QMainWindow):
def __init__(self):
self.widget = None
super(Mainwindow, self).__init__()
self.setWindowTitle('test')
def ui(self):
self.setCentralWidget(self.widget)
self.show()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
Window = Mainwindow()
Window.widget = RandomWidget(Window)
Window.ui()
sys.exit(app.exec_())
https://stackoverflow.com/questions/34637099
复制相似问题