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_())
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_())
这两段代码的区别:
第一个是每次改变窗口形状,都会创建新的三个控件,虽然它们在函数的局部作用域内,但是它们不会被内存释放,因为它们的父控件是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_())
原文地址:https://www.cnblogs.com/zach0812/p/11373451.html
时间: 2024-10-07 20:43:02