[英]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
,其中包含scroll
和hbox
布局。 检查这个!
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.