Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: 在FlowLayout添加很多相同控件后拖动窗体,窗体尺寸突变 #858

Closed
lmhHydropower opened this issue Apr 29, 2024 · 4 comments
Labels
bug Something isn't working

Comments

@lmhHydropower
Copy link

What happened?

在FlowLayout添加很多相同控件后鼠标按住主窗体尝试拖动窗体尺寸自动变化。
或者尝试放大窗口时,窗口尺寸突然变大

Operation System

Windows 11 家庭中文版 23H2 22631.3447

Python Version

3.8.18

PyQt/PySide Version

PyQt 5.15.9

PyQt/PySide-Fluent-Widgets Version

1.3.5

How to Reproduce?

在 flow_layout 的例子中,添加很多QPushButton,然后运行。尝试拖动窗体,就可以复现,窗口尺寸持续增大的bug。或者,开始运行后,尝试将窗体高度拉大,窗体会突然变大。

Minimum code

# coding:utf-8
import sys
from PyQt5.QtCore import QEasingCurve
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton

from qfluentwidgets import FlowLayout


class Demo(QWidget):

    def __init__(self):
        super().__init__()
        layout = FlowLayout(self, needAni=True)

        # customize animation
        layout.setAnimation(250, QEasingCurve.OutQuad)

        layout.setContentsMargins(30, 30, 30, 30)
        layout.setVerticalSpacing(20)
        layout.setHorizontalSpacing(10)

        layout.addWidget(QPushButton('aiko'))
        layout.addWidget(QPushButton('刘静爱'))
        layout.addWidget(QPushButton('柳井爱子'))
        layout.addWidget(QPushButton('aiko 赛高'))
        layout.addWidget(QPushButton('aiko 太爱啦😘'))
        layout.addWidget(QPushButton('aiko'))
        layout.addWidget(QPushButton('刘静爱'))
        layout.addWidget(QPushButton('柳井爱子'))
        layout.addWidget(QPushButton('aiko 赛高'))
        layout.addWidget(QPushButton('aiko 太爱啦😘'))
        layout.addWidget(QPushButton('aiko'))
        layout.addWidget(QPushButton('刘静爱'))
        layout.addWidget(QPushButton('柳井爱子'))
        layout.addWidget(QPushButton('aiko 赛高'))
        layout.addWidget(QPushButton('aiko 太爱啦😘'))
        layout.addWidget(QPushButton('aiko'))
        layout.addWidget(QPushButton('刘静爱'))
        layout.addWidget(QPushButton('柳井爱子'))
        layout.addWidget(QPushButton('aiko 赛高'))
        layout.addWidget(QPushButton('aiko 太爱啦😘'))

        self.resize(250, 300)
        self.setStyleSheet('Demo{background: white} QPushButton{padding: 5px 10px; font:15px "Microsoft YaHei"}')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Demo()
    w.show()
    app.exec_()
@lmhHydropower lmhHydropower added the bug Something isn't working label Apr 29, 2024
@rainzee
Copy link
Contributor

rainzee commented May 1, 2024

这应该是预期行为,并不是一个 bug

@lmhHydropower
Copy link
Author

我只想拖动窗口,它会突然变得很长,而FlowLayout中内容很多,突然边长的窗口早就超出屏幕范围。请问这种突变是预期行为?

20240503_163240.mp4

@lmhHydropower lmhHydropower changed the title [Bug]: 在FlowLayout添加很多相同控件后鼠标按住主窗体尝试拖动窗体自动变化 [Bug]: 在FlowLayout添加很多相同控件后拖动窗体,窗体尺寸突变 May 3, 2024
@AlexZhu2001
Copy link
Contributor

因为QWidget的大小是固定的,你这样写程序只能自动缩放到能够展示所有的控件。其实怎么使用取决于你想要实现的效果。

如果你希望不缩放窗口大小,形成从上到下的滚动区域,那你应该继承自QScrollArea,例如:

# coding:utf-8
import sys
from PyQt5.QtCore import QEasingCurve
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QScrollArea

from qfluentwidgets import FlowLayout


class Demo(QScrollArea):

    def __init__(self):
        super().__init__()
        self.w = QWidget(self)
        self.setWidget(self.w)
        self.setWidgetResizable(True)
        layout = FlowLayout(self.w, needAni=True)

        # customize animation
        layout.setAnimation(250, QEasingCurve.OutQuad)

        layout.setContentsMargins(30, 30, 30, 30)
        layout.setVerticalSpacing(20)
        layout.setHorizontalSpacing(10)

        layout.addWidget(QPushButton('aiko'))
        layout.addWidget(QPushButton('刘静爱'))
        layout.addWidget(QPushButton('柳井爱子'))
        layout.addWidget(QPushButton('aiko 赛高'))
        layout.addWidget(QPushButton('aiko 太爱啦😘'))
        layout.addWidget(QPushButton('aiko'))
        layout.addWidget(QPushButton('刘静爱'))
        layout.addWidget(QPushButton('柳井爱子'))
        layout.addWidget(QPushButton('aiko 赛高'))
        layout.addWidget(QPushButton('aiko 太爱啦😘'))
        layout.addWidget(QPushButton('aiko'))
        layout.addWidget(QPushButton('刘静爱'))
        layout.addWidget(QPushButton('柳井爱子'))
        layout.addWidget(QPushButton('aiko 赛高'))
        layout.addWidget(QPushButton('aiko 太爱啦😘'))
        layout.addWidget(QPushButton('aiko'))
        layout.addWidget(QPushButton('刘静爱'))
        layout.addWidget(QPushButton('柳井爱子'))
        layout.addWidget(QPushButton('aiko 赛高'))
        layout.addWidget(QPushButton('aiko 太爱啦😘'))

        self.resize(250, 300)
        self.setStyleSheet('Demo{background: white} QPushButton{padding: 5px 10px; font:15px "Microsoft YaHei"}')


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Demo()
    w.show()
    app.exec_()

其他也同理,这个layout一般也不会单独作为顶级窗口的layout使用才对

@lmhHydropower
Copy link
Author

感谢,感谢。👍👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants