Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何添加嵌套层和小部件?_Python_Pyqt_Pyqt5_Qlayout - Fatal编程技术网

Python 如何添加嵌套层和小部件?

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

我对以下程序的布局有问题。我想将QHBoxLayout插入QVBoxLayout的第一行(或任何一行)。目标是实现如下目标:

以下是我到目前为止的情况:

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)