distiller的另一个实例正忙于启动_PYQT5学习(02):利用Qt Designer制作第一个窗口程序

目标

  • 利用Qt Designer设计窗口界面
  • 使用PyUIC把Qt Designer生成的UI文件转换为py文件
  • 使用转换生成的py文件

创建项目

  • 启动启动pycharm并创建项目

这一环节在这里就不过多讲述了,方法与前面所说的《使用pycharm创建我的python项目》一致,如果有不清楚的同学可以参考这篇文章。

  • 安装包:pyqt5

前面安装的pyqt5-tools包含的只是Qt Designer等工具,若要正常使用这些工具生成窗体文件,pyqt5这个包是需要安装到当前项目的。

c6e10e3e023c41c7a5872691ef338987.png

安装包:pyqt5

当然,如果当前项目使用的是全局环境,而且你已经在全局环境中安装好了pyqt5,那么在项目环境中就能够直接找到这个包,不用再重复安装了。

制作窗口UI

  • 启动Qt Designer

Qt Designer如果已经正确连接到pycharm,那就可以直接通过pycharm菜单中的Tools->External Tools->QT设计师来启动。External Tools中的“QT设计师”选项名字是在连接时自行设置的,如果还未了解如何把Qt Designer连接到pycharm中,可以参考我的另一篇文章《PYQT5学习(01):Qt Designer安装和设置》

3422421e3b974f66b4072751deb7171d.png

启动Qt Designer

  • 选择创建的窗口类型

启动Qt Designer后,会看到下面的界面。这里是要求我们选择创建窗口的类型,建议选择“Widget”。不同的类型本质都是一样,只是创建窗口的参数和窗口中包含的控件会有所区别。Widget选项创建的窗口是最简模式,只包含了一个空白的容器,我们需要自行往里边添加不同的控件。

aaffd11bb437b6d0ce4fee6a18007199.png

选择完成后,单击“Create”按钮创建窗口。

  • 添加控件

选择创建窗口类型后,可以看到下图的界面。这时在Qt Designer界面上看到一个窗口模样的预览窗口,我们可以使用鼠标向里面添加控件,修改其中各部分的属性,添加QSS样式等。

144449d1150ea8f54b80c3cf77a5b7ed.png

下面尝试把控件箱中的"Label"控件添加到窗口上。在控件箱的“Display Widgets”类别在找到“Label"控件,使用鼠标的拖动操作,把一个Label拖放到窗口上。到此为止,我们成功为窗口添加了一个控件。其它控件的添加方法也与此相似,大家也可以尝试把更多的控件添加到窗口上。

1c4c7a5c9da26a20d0c856111a32fad6.png
  • 修改控件属性

刚添加的控件会使用系统的默认设置,我们可以对它的属性进行调整,让它以期望的效果进行显示。例如刚才添加的”Label“,可以修改它的字体、大小、颜色等各种属性。具体操作可以参见下图:

559eb67b92d1afdd7db4b8a90bad7815.gif

每类控件所具有的属性非常多,我们在刚接触时不要想着把所有的属性都记住。而应该先掌握常用的属性作用和修改方法,熟练后会接触到更多的编程需求。当新的需求用到新的属性时,再结合需要去了解。控件的属性最好是参考官方文档,那里更新速度最快,资料最完整。

  • 保存UI文件

具体的保存操作这里就不详细说了,大家自己脑补吧~

把UI文件转换成.py文件

Qt Designer中创建的UI文件是不能被PYQT5这个包所识别,我们需要调用PYQT5-Tools中的PyUIC程序进行转换,把UI文件中的每一项设置翻译成对就的Python指令,调用PYQT5来进行窗口的实际操作。

7267ebc09fe3a811ad36e0294fd9e19f.png

可以发现,PYQT的窗口编程,实际是需要我们编写代码调用PYQT5包中的方法,进行窗口、控件创建和属性修改等。但手动编码的效率较低,对于重复性事务需要反反复复地输入代码,工作效率低下。为此,PYQT5-Tools这组工具就是专门解决这一问题而诞生。它可以使用可视化的方式让用户设定窗口,然后把用户的设定批量地转换成对就的指令,大大简化了开发的过程。

b660ba2db45dd071295b55e83fa85868.png

如上图所示,由于前面我们已经把PyUIC与Pycharm连接好,所以UI文件的转换操作非常简单。只要在需转换的UI文件上单击鼠标右键,从弹出的快捷菜单中找到“Extenal Tools”中的UI转PY选项。(这个选项名字与连接进的设置有关,不一定叫这个名字。)具体设置方法参见另一篇文章《PYQT5学习(01):Qt Designer安装和设置》。这样就可以得到转换好的py文件了。

把窗口添加到程序中

通过Qt Designer设计生成的窗口py文件,实际是封装成一个类。而我们要在程序中展示这个窗口,首先需要把这个类导入,并把它实例化。由于在Qt Designer中没有修改窗口的类名,所以这时类名应该还是默认的:Ui_Form。

在项目中新建一个新的py文件,作为项目的入口主程序。然后把Qt Designer在生成的窗口类Ui_Form导入,参照下面的程序对类进行实例化。运行程序,可看到我们刚才设计的窗口。

import sysfrom PyQt5 import QtWidgetsfrom test_win import Ui_Formapp=QtWidgets.QApplication(sys.argv)widget=QtWidgets.QWidget()ui=Ui_Form()ui.setupUi(widget)widget.show()sys.exit(app.exec_())

大家对上面的代码可能不太理解,这个问题暂时不去理会。现在需要先了解UI的设计和转换,并且应用到程序。至于具体的原理,后面再来逐一细说。

本篇文章中的源码打包在以下地址,有需要的请自行下载:

链接:https://pan.baidu.com/s/1bOMz4cTIU9la8rbrtwGJag 提取码:quos

最后,需要说明一下。本人并非技术大牛,也不是什么高手。写这些pyqt5的内容是为了充当学习的笔记,方便日后忘记时查阅。所以内容上一定会有错漏的地方,希望大家帮忙指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的利用Distiller进行知识蒸馏的Python代码示例: ```python import torch import distiller # 定义原始模型 class OriginalModel(torch.nn.Module): def __init__(self): super(OriginalModel, self).__init__() self.conv1 = torch.nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1) self.relu1 = torch.nn.ReLU(inplace=True) self.conv2 = torch.nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=1) self.relu2 = torch.nn.ReLU(inplace=True) self.fc = torch.nn.Linear(64*32*32, 10) def forward(self, x): x = self.conv1(x) x = self.relu1(x) x = self.conv2(x) x = self.relu2(x) x = x.view(-1, 64*32*32) x = self.fc(x) return x # 定义蒸馏模型 class DistilledModel(torch.nn.Module): def __init__(self, teacher_model): super(DistilledModel, self).__init__() self.teacher_model = teacher_model self.conv1 = torch.nn.Conv2d(3, 32, kernel_size=3, stride=1, padding=1) self.relu1 = torch.nn.ReLU(inplace=True) self.conv2 = torch.nn.Conv2d(32, 32, kernel_size=3, stride=1, padding=1) self.relu2 = torch.nn.ReLU(inplace=True) self.fc = torch.nn.Linear(32*32*32, 10) def forward(self, x): with torch.no_grad(): teacher_output = self.teacher_model(x) x = self.conv1(x) x = self.relu1(x) x = self.conv2(x) x = self.relu2(x) x = x.view(-1, 32*32*32) x = self.fc(x) return x, teacher_output # 加载原始模型和数据 original_model = OriginalModel() original_model.eval() train_loader, val_loader = distiller.data.load_data( "cifar10", "/path/to/data", 128, 4) # 定义蒸馏器 distiller = distiller.Distiller( train_loader, val_loader, original_model, DistilledModel, "cifar10", "/path/to/checkpoints", 0.1, 0.1, 0.5, 0.5, 0.5) # 开始蒸馏 distiller.run() ``` 以上代码示例中,我们定义了一个原始模型和一个蒸馏模型,并使用Distiller进行知识蒸馏。在蒸馏模型中,我们使用了原始模型的输出作为教师模型的输出,并在训练过程中使用了蒸馏损失和原始模型的损失来进行训练。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值