簡體   English   中英

如何並排粘貼小部件

[英]How to stick widgets side by side

下面的代碼創建了一個包含三個小部件的對話窗口:QLabel、QComboBox 和 QButton。

我希望 QLabel 和 QComboBox 坐在同一條線上。 這就是為什么這兩個小部件被分配到相同的水平布局的原因。 調整對話框大小會在 Label 和 ComboBox 之間創建一個巨大的空白空間。 調整對話框大小時,如何確保 Combo 的左側貼在 Label 的右側?

在此處輸入圖片說明

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
app = QApplication([])


class Dialog(QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        self.setLayout(QVBoxLayout())
        h_layout = QHBoxLayout()
        self.layout().addLayout(h_layout)
        label = QLabel(self)
        label.setText('Month:')
        combo = QComboBox(self)
        h_layout.addWidget(label)
        h_layout.addWidget(combo)
        button = QPushButton('Ok')
        self.layout().addWidget(button)
        self.resize(200, 50)
        self.show()


dialog = Dialog()
app.exec_()

您必須通過QSizePolicy建立大小策略,在這種情況下,您必須在QComboBox的水平組件中設置策略QSizePolicy::Expanding

import sys

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

app = QApplication(sys.argv)


class Dialog(QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        self.setLayout(QVBoxLayout())
        h_layout = QHBoxLayout()
        self.layout().addLayout(h_layout)
        label = QLabel(self)
        label.setText('Month:')

        combo = QComboBox(self)
        policy = combo.sizePolicy()
        policy.setHorizontalPolicy(QSizePolicy.Expanding)
        combo.setSizePolicy(policy)

        h_layout.addWidget(label)
        h_layout.addWidget(combo)
        button = QPushButton('Ok')
        self.layout().addWidget(button)
        self.resize(200, 50)
        self.show()


dialog = Dialog()
sys.exit(app.exec_())

在此處輸入圖片說明

更短更好的解決方案是在 addWidget() 函數中添加參數stretch=1

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
app = QApplication([])

class Dialog(QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        self.setLayout(QVBoxLayout())
        h_layout = QHBoxLayout()
        self.layout().addLayout(h_layout)
        label = QLabel(self)
        label.setText('Month:')
        combo = QComboBox(self)
        h_layout.addWidget(label)
        h_layout.addWidget(combo, stretch=1)
        button = QPushButton('Ok')
        self.layout().addWidget(button)
        self.resize(200, 50)
        self.show()

dialog = Dialog()
app.exec_()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM