参考B站教程:【PyQt5 快速入门】 https://www.bilibili.com/video/BV1LT4y1e72X/?p=4&share_source=copy_web&vd_source=404581381724503685cb98601d6706fb
上节课介绍了pyqt5的控件和使用方法,接下来讲如何调整窗口大小和位置。
先科普一下快捷键,在python中一键注释/撤销注释是用Ctrl+/,撤销操作是Ctrl+z或者在“编辑”中找到撤销按钮。
设置窗口大小的函数是:
w.resize(长,宽)
设置窗口位置的函数是:
w.move(横坐标,纵坐标)
这里解释一下横纵坐标的意义,其实设置的是窗口的开始位置,也就是左上角那个点点。坐标系是整个屏幕左上角点为原点,如下:
实验一,以把窗口放左上角,调整窗口大小为1000*800为例:
#导入模块
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QDesktopWidget
if __name__== '__main__':
#1.创建了一个QApplication对象,变量为app指向QApplication这个类
app = QApplication(sys.argv)
#2.界面里面有啥
w = QWidget()
#设置窗口标题
w.setWindowTitle("第一个PyQt")
#调整窗口大小
w.resize(1000,800)
#将窗口的 开始位置 设置在屏幕的左上角(注意,可不是中心位置哦)
w.move(0,0)
#展示窗口,没这句就看不见界面
w.show()
#3.程序进行循环等待状态
app.exec()
结果如下:
实验二,为了保证该pyqt文件无论在什么设备下都能很舒适地已显示出来,也就是永远在屏幕中间,我们设置它的参数为中间位置。
这里插入一下写代码小技巧,就是在注释中写todo,方便日后在写todo的这一行补完未完成的代码,所以我们可以通过查找todo来看看哪些代码需要完成。
现介绍一下几个函数:QDesktopWidget()意思是获取当前屏幕组件对象,availableGeometry()意思是屏幕可用的位置坐标,center()指中央位置。
为了实现上述目的,我们写入如下代码,解释写在注释里了:
#导入模块
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QDesktopWidget
if __name__== '__main__':
#1.创建了一个QApplication对象,变量为app指向QApplication这个类
app = QApplication(sys.argv)
#2.界面里面有啥
w = QWidget()
#设置窗口标题
w.setWindowTitle("第一个PyQt")
#调整窗口大小为300*300
w.resize(300,300)
#调整窗口在屏幕中间显示
#这句代码的意思是“整个屏幕可用位置的中央位置”
center_pointer=QDesktopWidget().availableGeometry().center()
#打印一下这个所谓的中心位置在哪(实际上就是屏幕长宽各除以二)
print(center_pointer)
#引入变量x和y,将中心点横纵坐标分别赋给它们
x=center_pointer.x()
y=center_pointer.y()
#将窗口最左上角点移动到(x,y)
w.move(x,y)
#展示窗口,没这句就看不见界面
w.show()
#3.程序进行循环等待状态
app.exec()
执行后这样了:
这跟我们想要的在中心位置不一样,我们希望它的中心在屏幕中心
因此作以下改动:
将#将窗口最左上角点移动到(x,y)
w.move(x,y)
改成:
#将窗口最左上角点移动到(x-150,y-150)
w.move(x-150,y-150)
这样也能达到中心在中心的效果。不过这显然不是最好的解决方案,因为窗口大小变化这个地方也得变,最好引入一个自动计算的函数
#导入模块
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QDesktopWidget
if __name__== '__main__':
#1.创建了一个QApplication对象,变量为app指向QApplication这个类
app = QApplication(sys.argv)
#2.界面里面有啥
w = QWidget()
#设置窗口标题
w.setWindowTitle("第一个PyQt")
#调整窗口大小为300*300
w.resize(300,300)
#将窗口的 开始位置 设置在屏幕的左上角(注意,可不是中心位置哦)
w.move(0,0)
#调整窗口在屏幕中间显示
#QDesktopWidget()意思是获取当前屏幕组件对象,availableGeometry()意思是屏幕可用的位置坐标,center()指中央
#这句代码的意思是“整个屏幕可用位置的中央位置”
center_pointer=QDesktopWidget().availableGeometry().center()
#打印一下这个所谓的中心位置在哪(实际上就是屏幕长宽各除以二)
print(center_pointer)
#引入变量x和y,将中心点横纵坐标分别赋给它们
x=center_pointer.x()
y=center_pointer.y()
#frameGeometry()意思是目前该窗口对象w的坐标和长宽数据
print(w.frameGeometry())
#getRect()意思是获取这个坐标数据(后面知道了是元组),它得到的是(0,0,300,300),即w是在(0,0)处长宽300*300
print(w.frameGeometry().getRect())
#看看这个是个啥数据类型,发现是元组
print(type(w.frameGeometry().getRect()))
#拆包,分别用四个变量提取出横纵坐标和长宽
old_x,old_y,widtn,height=w.frameGeometry().getRect()
#把x往左缩一点,把y往右缩一点;move只接受整型数据,所以要取整
w.move(int(x-widtn/2),int(y-height/2))
#展示窗口,没这句就看不见界面
w.show()
运行结果如下:
注意,第16 行代码w.move(0,0),其实把这行代码删了,系统也会默认frameGeometry()得到目前该窗口对象w的坐标为(0,0),也就是此时窗口对象在屏幕最左上角。
我尝试改了一下变成w.move(2,2),这时候frameGeometry()得到目前该窗口对象w的坐标为 (2,2)了,最后窗口的位置还是在正确位置,运行窗口成了:
本节完