将QDialog调整为MainWindow的大小

问题描述 投票:0回答:1

有一个带有按钮的QWidget,单击该按钮会弹出一个QDialog。对话框的setParent设置为QWidget。每次单击该按钮时,对话框都会显示一个特定的大小。我不知道为什么当然,如果为对话框设置了大小,则随之而来的是该大小。但是,无论窗口大小如何,如何使对话框填充整个窗口并占据窗口的大小?例如,如果窗口大小为700、600,则对话框应继承该大小,并且如果窗口已调整大小或最大化,则对话框应随窗口更改其大小。这是代码:

import sys
from PySide2.QtWidgets import *
from PySide2 import *


class Dialog(QDialog):
    def __init__(self):
    super(Dialog, self).__init__()
    self.move(0, 0)
    #self.resize(200, 100)
    self.setStyleSheet("background: teal;")
    self.setParent(MainWindow)


 def show_dialog():
    d = Dialog()
    d.exec_()


class MainWindow(QWidget):
    def __init__(self):
    super(MainWindow, self).__init__()
    self.resize(700, 600)

    btn = QPushButton()
    btn.setText("Click")

    layout = QVBoxLayout()
    layout.addWidget(btn)
    self.setLayout(layout)

    btn.clicked.connect(show_dialog)


if __name__ == '__main__':
   app = QApplication(sys.argv)
   MainWindow = MainWindow()
   MainWindow.show()
   sys.exit(app.exec_())
python python-3.x pyside2 qdialog
1个回答
0
投票

解决方案是使用resize()方法设置大小:

self.setParent(MainWindow)
self.resize(MainWindow.size())

尽管我不喜欢访问元素的方式,因为它可能会产生错误,但是我将您的解决方案重写如下:

import sys
from functools import partial

from PySide2.QtWidgets import QApplication, QDialog, QPushButton, QVBoxLayout, QWidget


class Dialog(QDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        self.setStyleSheet("background: teal;")


def show_dialog(w):
    d = Dialog(w)
    d.resize(w.size())
    d.exec_()


class MainWindow(QWidget):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.resize(700, 600)
        btn = QPushButton()
        btn.setText("Click")
        layout = QVBoxLayout(self)
        layout.addWidget(btn)
        btn.clicked.connect(partial(show_dialog, self))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    MainWindow = MainWindow()
    MainWindow.show()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.