Python 如何添加嵌套层和小部件?
我对以下程序的布局有问题。我想将QHBoxLayout插入QVBoxLayout的第一行(或任何一行)。目标是实现如下目标: 以下是我到目前为止的情况:Python 如何添加嵌套层和小部件?,python,pyqt,pyqt5,qlayout,Python,Pyqt,Pyqt5,Qlayout,我对以下程序的布局有问题。我想将QHBoxLayout插入QVBoxLayout的第一行(或任何一行)。目标是实现如下目标: 以下是我到目前为止的情况: import sys, os from PyQt5.QtWidgets import * from PyQt5.QtWebEngineWidgets import QWebEngineView from PyQt5.QtGui import * from PyQt5.QtCore import * class MainWindow(QMai
import sys, os
from PyQt5.QtWidgets import *
from PyQt5.QtWebEngineWidgets import QWebEngineView
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setFixedSize(600, 600)
layout = QVBoxLayout()
layout.setContentsMargins(0,0,0,0)
layout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
self.webEngineView = QWebEngineView()
self.loadPage()
self.webEngineView.setFixedSize(QSize(600, 280))
layout.addWidget(self.webEngineView)
button = QPushButton("CLICK", self)
button.setFixedSize(QSize(50, 80))
button.clicked.connect(self.clickme)
button.setStyleSheet("""
background-color: red;
""")
layout.addWidget(button)
# without this part the code works fine:
titlelayout = QHBoxLayout()
titlelayout.setContentsMargins(0,0,0,0)
titlelayout.setAlignment(Qt.AlignRight | Qt.AlignTop)
button1 = QPushButton("CLICK", self)
button1.setFixedSize(QSize(40, 40))
titlelayout.addWidget(button1)
titlelayout.addLayout(layout)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
def loadPage(self):
html = '''
<html style="width: 100%; height: 100%; margin: 0; padding: 0;">
<body style="overflow: hidden; width: 100%; height: 100%; margin: 0; padding: 0; background-color: #E6E6FA;">
</body>
</html>'''
self.webEngineView.setHtml(html)
def clickme(self):
print("clicked")
app = QApplication(sys.argv)
app.setStyleSheet("QMainWindow {background-color:white}")
window = MainWindow()
window.show()
sys.exit(app.exec_())
导入系统,操作系统
从PyQt5.QtWidgets导入*
从PyQt5.QtWebEngineWidgets导入QWebEngineView
从PyQt5.QtGui导入*
从PyQt5.QtCore导入*
类主窗口(QMainWindow):
定义初始化(self,*args,**kwargs):
超级(主窗口,自我)。\uuuuu初始化(*args,**kwargs)
自设置固定大小(600600)
layout=QVBoxLayout()
布局。设置内容边缘(0,0,0,0)
布局.设置对齐(Qt.AlignLeft | Qt.AlignTop)
self.webEngineView=QWebEngineView()
self.loadPage()
self.webEngineView.setFixedSize(QSize(600280))
layout.addWidget(self.webEngineView)
按钮=QPushButton(“单击”,自行)
按钮。设置固定尺寸(QSize(50,80))
按钮。单击。连接(self.clickme)
按钮。设置样式表(“”)
背景色:红色;
""")
layout.addWidget(按钮)
#没有这一部分,代码可以正常工作:
titlelayout=QHBoxLayout()
titlelayout.setContentsMargins(0,0,0,0)
titlelayout.setAlignment(Qt.AlignRight | Qt.AlignTop)
button1=QPushButton(“点击”,自我)
按钮1.设置固定尺寸(QSize(40,40))
titlelayout.addWidget(按钮1)
标题布局。添加布局(布局)
widget=QWidget()
widget.setLayout(布局)
self.setCentralWidget(小部件)
def加载页(自):
html=“”
'''
self.webEngineView.setHtml(html)
def clickme(自我):
打印(“单击”)
app=QApplication(sys.argv)
app.setStyleSheet(“QMainWindow{背景色:白色}”)
窗口=主窗口()
window.show()
sys.exit(app.exec_())
在我的设计中,我不喜欢将一个布局放在另一个布局中,而是使用QWidget作为中介的容器: 导入系统 从PyQt5.QtCore导入QSize,Qt 从PyQt5.QtWidgets导入( QApplication, QGridLayout, QHBoxLayout, QLineEdit, QMainWindow, QPushButton, QVBoxLayout, QWidget, ) 从PyQt5.QtWebEngineWidgets导入QWebEngineView 类主窗口(QMainWindow): 定义初始化(self,*args,**kwargs): 超级(主窗口,自我)。\uuuuu初始化(*args,**kwargs) 自设置固定大小(600600) self.webEngineView=QWebEngineView() button1=QPushButton(“单击”) 按钮1.设置固定尺寸(QSize(50,80)) button1.setStyleSheet(“背景色:红色;”) 按钮1.点击连接(self.clickme) button2=QPushButton(“单击”) 按钮2.设置固定尺寸(QSize(50,80)) button3=QPushButton(“单击”) 按钮3.设置固定尺寸(QSize(50,80)) title_widget=QWidget() hlay=QHBoxLayout(标题_小部件) hlay.addWidget(按钮1,对齐=Qt.AlignLeft) hlay.addStretch() hlay.addWidget(按钮2,对齐=Qt.AlignRight) hlay.addWidget(按钮3,对齐=Qt.AlignRight) footer_widget=QWidget() hlay2=QGridLayout(页脚小部件) hlay2.addWidget(QPushButton(“Foo”),0,0) addWidget(QLineEdit(“Bar”),1,0,1,2) central_widget=QWidget() self.setCentralWidget(中心窗口小部件) vlayout=QVBoxLayout(中心_小部件) vlayout.addWidget(title_widget) vlayout.addWidget(self.webEngineView,stretch=1) 添加小部件(页脚小部件) self.loadPage() def加载页(自): html=”“” """ self.webEngineView.setHtml(html) def clickme(自我): 打印(“单击”) app=QApplication(sys.argv) app.setStyleSheet(“QMainWindow{背景色:白色}”) 窗口=主窗口() window.show() sys.exit(app.exec_())
谢谢,非常好用。出于好奇,使用您的方法而不是使用嵌套布局是否有好处?还有一个问题。您的解决方案会在窗口的所有4个边上生成边距,即使我在2个布局上使用setContentsMargins(0,0,0,0)。有没有办法去掉这个空白?使用
title\u widget.setContentsMargins(0,0,0,0)