PyQt5 中当窗口大小改变时,如何去调整控件的位置以适应窗口大小改变的思考

from PyQt5.Qt import * #刚开始学习可以这样一下导入
import sys,time

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QLineEdit 输出模式的案例")
        self.resize(400,400)
        self.set_ui()
        self.i = 1
    def set_ui(self):
        pass


    def resizeEvent(self, event):


        widget_w = 150
        widget_h = 40
        widget_h_margin = 10
        top_margin = 30

        account_lineEdit = QLineEdit(self)
        account_lineEdit.resize(widget_w,widget_h)

        pwd_lineEdit = QLineEdit(self)
        pwd_lineEdit.resize(widget_w,widget_h)

        btn = QPushButton(self)
        btn.setText("按钮")
        btn.resize(widget_w,widget_h)


        x = (self.width() - widget_w)/2  -self.i
        y1 = top_margin
        y2 = y1 + widget_h +widget_h_margin
        y3 = y2 + widget_h +widget_h_margin

        account_lineEdit.move(x,y1)
        pwd_lineEdit.move(x,y2)
        btn.move(x,y3)


        print(id(btn))
        print(len(self.children()))

        print("===",x,y1,y2,y3)
        print("i = ",self.i)
        self.i +=1


if __name__ == '__main__':
    app =QApplication(sys.argv)

    window = Window()
    window.show()

    sys.exit(app.exec_())
View Code
from PyQt5.Qt import * #刚开始学习可以这样一下导入
import sys,time

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QLineEdit 输出模式的案例")
        self.resize(400,400)
        self.set_ui()
        self.i = 1
    def set_ui(self):
        self.account_lineEdit = QLineEdit(self)
        self.pwd_lineEdit = QLineEdit(self)
        self.btn = QPushButton(self)


    def resizeEvent(self, event):
        widget_w = 150
        widget_h = 30
        widget_h_margin = 10
        top_margin = 50

        self.account_lineEdit.resize(widget_w,widget_h)

        self.pwd_lineEdit.resize(widget_w,widget_h)

        self.btn.setText("登   录")
        self.btn.resize(widget_w,widget_h)

        x = (self.width() - widget_w)/2
        y1 = top_margin
        y2 = y1 + widget_h +widget_h_margin
        y3 = y2 + widget_h +widget_h_margin

        self.account_lineEdit.move(x,y1)
        self.pwd_lineEdit.move(x,y2)
        self.btn.move(x,y3)


        print(id(self.btn))
        print(len(self.children()))

        print("===",x,y1,y2,y3)
        print("i = ",self.i)
        self.i +=1


if __name__ == '__main__':
    app =QApplication(sys.argv)

    window = Window()
    window.show()

    sys.exit(app.exec_())
View Code

这两段代码的区别:

第一个是每次改变窗口形状,都会创建新的三个控件,虽然它们在函数的局部作用域内,但是它们不会被内存释放,因为它们的父控件是window 

每次都会创建新的控件,但是都没有展示出来,是因为没有采用show() 方法。

总结:

一个对象,没有被释放的原因:

1,它是window 对象的属性

2,它的父控件是window 

最后,记住,如果一个后来创建的控件,如果不用show() 它是不会展示出来的。

===============================================================

这个疑问源于当窗口大小改变时,如何去调整控件的位置的问题

它主要是借助于,当每次窗口改变时都会调用resizeEvent() 这个方法!

它应该按后者将三个控件作为对象的属性,这样每次操作的都是同一个控件,而不是去新创建!!!!

顺便提一句:

如何控制窗口的最大和最小,调用setMinsize 和setMaxsize即可(函数名为大概)。

from PyQt5.Qt import * #刚开始学习可以这样一下导入
import sys,time

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QLineEdit 输出模式的案例")
        self.resize(400,400)
        ###########################################################
        self.setMinimumSize(400,400)  # 设置最小尺寸
        self.setMaximumSize(800,800)  # 设置最大尺寸,这时全屏就不能用了
        
        ###########################################################



        self.set_ui()

    def set_ui(self):
        self.account_lineEdit = QLineEdit(self)
        self.pwd_lineEdit = QLineEdit(self)
        self.btn = QPushButton(self)


    def resizeEvent(self, event):
        widget_w = 150
        widget_h = 30
        widget_h_margin = 10
        top_margin = 50

        self.account_lineEdit.resize(widget_w,widget_h)

        self.pwd_lineEdit.resize(widget_w,widget_h)

        self.btn.setText("登   录")
        self.btn.resize(widget_w,widget_h)

        x = (self.width() - widget_w)/2
        y1 = top_margin
        y2 = y1 + widget_h +widget_h_margin
        y3 = y2 + widget_h +widget_h_margin

        self.account_lineEdit.move(x,y1)
        self.pwd_lineEdit.move(x,y2)
        self.btn.move(x,y3)

if __name__ == '__main__':
    app =QApplication(sys.argv)

    window = Window()
    window.show()

    sys.exit(app.exec_())
View Code
 

猜你喜欢

转载自www.cnblogs.com/zach0812/p/11373451.html