PyQt-Fluent-Widgets
PyQt-Fluent-Widgets copied to clipboard
[Bug]: 在FlowLayout添加很多相同控件后拖动窗体,窗体尺寸突变
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_()
这应该是预期行为,并不是一个 bug
我只想拖动窗口,它会突然变得很长,而FlowLayout中内容很多,突然边长的窗口早就超出屏幕范围。请问这种突变是预期行为?
https://github.com/zhiyiYo/PyQt-Fluent-Widgets/assets/48676885/ab5094fe-d24e-4a87-8a75-74a9fe2efb4d
因为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使用才对
感谢,感谢。👍👍