布局的中央小部件位置
Central widget position of layout
有没有办法在 qmain 的中央小部件中放置或调整布局 window。
我正在尝试使用 QMainWindow 编写一个应用程序。我在中央小部件中设置了不同的布局,但这些小部件的间距完全不同
class MainApp(QMainWindow):
def __init__(self,parent = None):
super().__init__(parent)
self.statusBar().showMessage('Select any option to proceed',3000)
self.setWindowTitle("CH APTMO App")
self.setGeometry(100,100,1050,600)
self.setFixedSize(self.size())
self.central_widget = QStackedWidget()
self.setCentralWidget(self.central_widget)
class InsideWidget(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.From = QLabel("From")
self.To = QLabel("To")
self.Type = QLabel("Type")
self.Number = QLabel("Number")
from_list = ["val1","val2","val3"]
self.fromentry = QComboBox()
self.fromentry.setEditable(True)
self.fromentry.addItems(from_list)
self.toentry = QLineEdit()
self.typeentry = QLineEdit()
self.numentry = QLineEdit()
self.receivebaglayout = QGridLayout()
self.receivebaglayout.addWidget(self.From,0,0)
self.receivebaglayout.addWidget(self.To,0,1)
self.receivebaglayout.addWidget(self.Type,0,2)
self.receivebaglayout.addWidget(self.Number,0,3)
self.receivebaglayout.addWidget(self.fromentry,1,0)
self.receivebaglayout.addWidget(self.toentry,1,1)
self.receivebaglayout.addWidget(self.typeentry,1,2)
self.receivebaglayout.addWidget(self.numentry,1,3)
self.receivebaglayout.setSpacing(10)
self.setLayout(self.receivebaglayout)
布局混乱中央小部件中的网格布局是这样的
显示第 1 行和第 2 行间距的图片:
如果我们将许多小部件添加到网格布局,则它已得到适当调整。但是,当小部件较少时,它会遍布中央小部件布局。
我们怎么能阻止这一切?
添加了预期的输出
预期输出:
默认情况下,Qt 使用 sizePolicy 来计算 QGridLayout 每一行的大小。在这种情况下,QLabel 倾向于垂直拉伸,而 QLineEdit 和 QComboBox 看不到这种行为。
由于不清楚OP想要什么,我会根据情况提供几种解决方案:
如果您希望项目位于顶部,则只需在行尾添加一个拉伸:
self.receivebaglayout.setRowStretch(2, 1)
如果您希望项目向中间定位,则只需在行的开头和结尾添加一个拉伸,以便第一行应该是第二行:
self.receivebaglayout = QGridLayout(self)
self.receivebaglayout.setRowStretch(0, 1)
self.receivebaglayout.addWidget(self.From, 1, 0)
self.receivebaglayout.addWidget(self.To, 1, 1)
self.receivebaglayout.addWidget(self.Type, 1, 2)
self.receivebaglayout.addWidget(self.Number, 1, 3)
self.receivebaglayout.addWidget(self.fromentry, 2, 0)
self.receivebaglayout.addWidget(self.toentry, 2, 1)
self.receivebaglayout.addWidget(self.typeentry, 2, 2)
self.receivebaglayout.addWidget(self.numentry, 2, 3)
self.receivebaglayout.setRowStretch(3, 1)
self.receivebaglayout.setSpacing(10)
有没有办法在 qmain 的中央小部件中放置或调整布局 window。
我正在尝试使用 QMainWindow 编写一个应用程序。我在中央小部件中设置了不同的布局,但这些小部件的间距完全不同
class MainApp(QMainWindow):
def __init__(self,parent = None):
super().__init__(parent)
self.statusBar().showMessage('Select any option to proceed',3000)
self.setWindowTitle("CH APTMO App")
self.setGeometry(100,100,1050,600)
self.setFixedSize(self.size())
self.central_widget = QStackedWidget()
self.setCentralWidget(self.central_widget)
class InsideWidget(QWidget):
def __init__(self,parent=None):
super().__init__(parent)
self.From = QLabel("From")
self.To = QLabel("To")
self.Type = QLabel("Type")
self.Number = QLabel("Number")
from_list = ["val1","val2","val3"]
self.fromentry = QComboBox()
self.fromentry.setEditable(True)
self.fromentry.addItems(from_list)
self.toentry = QLineEdit()
self.typeentry = QLineEdit()
self.numentry = QLineEdit()
self.receivebaglayout = QGridLayout()
self.receivebaglayout.addWidget(self.From,0,0)
self.receivebaglayout.addWidget(self.To,0,1)
self.receivebaglayout.addWidget(self.Type,0,2)
self.receivebaglayout.addWidget(self.Number,0,3)
self.receivebaglayout.addWidget(self.fromentry,1,0)
self.receivebaglayout.addWidget(self.toentry,1,1)
self.receivebaglayout.addWidget(self.typeentry,1,2)
self.receivebaglayout.addWidget(self.numentry,1,3)
self.receivebaglayout.setSpacing(10)
self.setLayout(self.receivebaglayout)
布局混乱中央小部件中的网格布局是这样的
显示第 1 行和第 2 行间距的图片:
如果我们将许多小部件添加到网格布局,则它已得到适当调整。但是,当小部件较少时,它会遍布中央小部件布局。
我们怎么能阻止这一切?
添加了预期的输出
预期输出:
默认情况下,Qt 使用 sizePolicy 来计算 QGridLayout 每一行的大小。在这种情况下,QLabel 倾向于垂直拉伸,而 QLineEdit 和 QComboBox 看不到这种行为。
由于不清楚OP想要什么,我会根据情况提供几种解决方案:
如果您希望项目位于顶部,则只需在行尾添加一个拉伸:
self.receivebaglayout.setRowStretch(2, 1)
如果您希望项目向中间定位,则只需在行的开头和结尾添加一个拉伸,以便第一行应该是第二行:
self.receivebaglayout = QGridLayout(self) self.receivebaglayout.setRowStretch(0, 1) self.receivebaglayout.addWidget(self.From, 1, 0) self.receivebaglayout.addWidget(self.To, 1, 1) self.receivebaglayout.addWidget(self.Type, 1, 2) self.receivebaglayout.addWidget(self.Number, 1, 3) self.receivebaglayout.addWidget(self.fromentry, 2, 0) self.receivebaglayout.addWidget(self.toentry, 2, 1) self.receivebaglayout.addWidget(self.typeentry, 2, 2) self.receivebaglayout.addWidget(self.numentry, 2, 3) self.receivebaglayout.setRowStretch(3, 1) self.receivebaglayout.setSpacing(10)