簡體   English   中英

PyQT5 在 Gridview 小部件下方添加第二個布局

[英]PyQT5 Add 2nd Layout below Gridview widget

再會! 我希望有人能告訴我下面的簡單代碼哪里出錯了。 我在 gridview 中顯示圖像(為簡單起見,下面顯示為按鈕)這些使用通常的行和列來顯示信息。 我的問題是在網格視圖下我希望添加兩個獨立的按鈕(確定/取消)。 這些我不想成為網格的一部分,而是自己在下面。

經過數小時的混亂,我認為我需要將我的網格視圖添加到一個垂直框,即頂部插槽,然后將我制作的按鈕添加到底部,但我不確定實現此目的的正確方法。 我對這段代碼的糟糕嘗試如下。 值得一提的是,完成的 gridview 被傳遞到一個可滾動的區域。 我不知道這是否是我的示例中沒有出現按鈕的原因。 謝謝

希望它看起來像這樣在此處輸入圖像描述

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = "Lost with widgets"
        self.main_window()

    def main_window(self):
        self.setWindowTitle(self.title)
        self.setGeometry(0, 0, 600, 600)
        # Make Grid
        self.grid = QGridLayout()
        self.grid.setSpacing(100)
        # Make buttons
        folder_button = QPushButton('Top Buttons 1', self)
        self.grid.addWidget(folder_button, 0, 1, alignment=Qt.AlignCenter)  # Add to grid
        folder_button1 = QPushButton('Top Buttons 2', self)
        self.grid.addWidget(folder_button1, 0, 2, alignment=Qt.AlignCenter)  # Add to grid
        # Complete layout of Grid
        self.setLayout(self.grid)
        #########################################################
        # Create Ok and Cancel bottom buttons#
        ########################################################
        okButton = QPushButton("OK")
        cancelButton = QPushButton("Cancel")
        # Horizonal
        hbox = QHBoxLayout()
        hbox.addStretch(1)
        hbox.addWidget(okButton)
        hbox.addWidget(cancelButton)
        # Vertical
        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox)
        # Set layout
        self.setLayout(hbox)
        # add widget and set its layout
        wrapper_widget = QWidget()
        wrapper_widget.setLayout(self.grid)
        # Scroll
        scroll = QScrollArea()
        scroll.setWidget(wrapper_widget)
        scroll.setSizeAdjustPolicy(scroll.AdjustToContents)
        scroll.setWidgetResizable(False) # Spaces out
        self.setCentralWidget(scroll)
        # Show
        self.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    sys.exit(app.exec())

這是因為您將scroll小部件設置為中心小部件。 scroll小部件僅包含wrapper_widget ,其中包含gridlayout ,而不是vbox

嘗試創建vbox並將scroll小部件和hbox添加到vbox ,並使用具有vbox布局的QWidget設置中央小部件。

我修改了您的一些代碼,添加了具有vbox布局的master_widget ,其中包含scrollhbox布局。 檢查這個!

class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title = "Lost with widgets"
        self.main_window()

    def main_window(self):
        self.setWindowTitle(self.title)
        self.setGeometry(0, 0, 600, 600)
        # Make Grid
        self.grid = QGridLayout()
        self.grid.setSpacing(100)
        # Make buttons
        folder_button = QPushButton('Top Buttons 1', self)
        self.grid.addWidget(folder_button, 0, 1, alignment=Qt.AlignCenter)  # Add to grid
        folder_button1 = QPushButton('Top Buttons 2', self)
        self.grid.addWidget(folder_button1, 0, 2, alignment=Qt.AlignCenter)  # Add to grid
        # Complete layout of Grid
        self.setLayout(self.grid)
        #########################################################
        # Create Ok and Cancel bottom buttons#
        ########################################################
        okButton = QPushButton("OK")
        cancelButton = QPushButton("Cancel")
        # Horizonal
        hbox = QHBoxLayout()
        hbox.addStretch(1)
        hbox.addWidget(okButton)
        hbox.addWidget(cancelButton)
        # Vertical
        vbox = QVBoxLayout()
        vbox.addStretch(1)
        # vbox.addLayout(hbox)
        # Set layout
        # self.setLayout(vbox)
        # add widget and set its layout
        wrapper_widget = QWidget()
        wrapper_widget.setLayout(self.grid)
        # Scroll
        scroll = QScrollArea()
        scroll.setWidget(wrapper_widget)
        # scroll.setSizeAdjustPolicy(scroll.AdjustToContents)
        scroll.setWidgetResizable(False) # Spaces out
        master_widget = QWidget()
        master_widget.setLayout(vbox)
        vbox.addWidget(scroll)
        vbox.addLayout(hbox)
        self.setCentralWidget(master_widget)
        # Show
        self.show()

暫無
暫無

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

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