类Form

Django Form类后端校验 """ Form表单类代码 """ from django import forms from django.core.exceptions import ValidationError from django.core.validators import EmailValidator, RegexValidator # 自定义检验器 # 方法一 class CheckNickName: def __call__(self, value): name_list = ['sb', ' 阅读详情
第一个坑,类Form。里面涉及到需要修改的,还是connet方法,原来的是这样:

=========================================
self.connect(dial, SIGNAL("valueChanged(int)"),
                     spinbox.setValue)
self.connect(spinbox, SIGNAL("valueChanged(int)"),
                     dial.setValue)
=========================================
在PyQt5,必须改成:
=========================================
dial.valueChanged.connect(spinbox.setValue)
spinbox.valueChanged.connect(dial.setValue)
=========================================
也就是说,建立各类的连接必须由该类的connect方法去实现。这样语法更为简洁。

第二个坑,类Form2。在“connet”这一部份,作者使用了QT槽,据说用SLOT()语法可能会更高效一些(中文版书P96):

=========================================
self.connect(dial, SIGNAL("valueChanged(int)"),
                     spinbox, SLOT("setValue(int)"))
self.connect(spinbox, SIGNAL("valueChanged(int)"),
                     dial, SLOT("setValue(int)"))
=========================================

查了一下官网,这种方法已经不支持了。 SIGNAL和SLOT已经作为装饰器使用了。总之,Form2还是得改成上面Form的样子:

=========================================
dial.valueChanged.connect(spinbox.setValue)
spinbox.valueChanged.connect(dial.setValue)
=========================================

第三个坑,类ZeroSpinBox和Form3。这两个类是相关联的。也是最大的一个坑。先上原来的代码:

=======================================================================
class ZeroSpinBox(QSpinBox):

    zeros = 0

    def __init__(self, parent=None):
        super(ZeroSpinBox, self).__init__(parent)
        self.connect(self, SIGNAL("valueChanged(int)"), self.checkzero)


    def checkzero(self):
        if self.value() == 0:
            self.zeros += 1
            self.emit(SIGNAL("atzero"), self.zeros)


class Form3(QDialog):

    def __init__(self, parent=None):
        super(Form3, self).__init__(parent)

        dial = QDial()
        dial.setNotchesVisible(True)
        zerospinbox = ZeroSpinBox()

        layout = QHBoxLayout()
        layout.addWidget(dial)
        layout.addWidget(zerospinbox)
        self.setLayout(layout)

        self.connect(dial, SIGNAL("valueChanged(int)"),
                     zerospinbox, SLOT("setValue(int)"))
        self.connect(zerospinbox, SIGNAL("valueChanged(int)"),
                     dial, SLOT("setValue(int)"))
        self.connect(zerospinbox, SIGNAL("atzero"), self.announce)
        self.setWindowTitle("Signals and Slots")


    def announce(self, zeros):
        print "ZeroSpinBox has been at zero %d times" % zeros

=======================================================================
在类ZeroSpinBox里面,有一个很让人费解的东西,就是SIGNAL("atzero"),简直就是凭空出来的,原书上说“它会发射自定义的atzero”信号,但在PYQT5中,这种自定义的信号必须先用 pyqtSignal初始化:

atzero = pyqtSignal(int)

然后才能发射出去。

self.atzero.emit(self.zeros),对比一下原来的方法: self.emit(SIGNAL("atzero"), self.zeros),和connect的使用方法很相似。

另外,在类Form3中的这几个语句:

self.connect(dial, SIGNAL("valueChanged(int)"),
                     zerospinbox, SLOT("setValue(int)"))
self.connect(zerospinbox, SIGNAL("valueChanged(int)"),
                     dial, SLOT("setValue(int)"))
self.connect(zerospinbox, SIGNAL("atzero"), self.announce)

要改成:

dial.valueChanged.connect(zerospinbox.setValue)
zerospinbox.valueChanged.connect(dial.setValue)
zerospinbox.atzero.connect(self.announce)

这下简洁多了。zerospinbox.atzero.connect(self.announce)这一句,实际上是将atzero与announce方法相连接。只要拔号盘归零一次,就将归零的次数显示出来。announce为作一个“槽”,是要加上装饰器的,所以才有了下面的改动:


@pyqtSlot(int)
def announce(self, zeros):
    print("ZeroSpinBox has been at zero %d times" % zeros)

第四个,有了前面的坑,这都不算坑了,类From4:

self.connect(lineedit, SIGNAL("textChanged(QString)"),
                     self.consoleEcho)

改成
lineedit.textChanged.connect(self.consoleEcho)

将consoleEcho方法,加上装饰器,作为槽使用:

@pyqtSlot(str)
def consoleEcho(self, text):
    print(text)

原来的unicode(text),要将unicode去掉,因为phtyon3.x默认是unicode


第五个坑,类TaxRate和外部函数rateChanged

================================================
class TaxRate(QObject):

    def __init__(self):
        super(TaxRate, self).__init__()
        self.__rate = 17.5


    def rate(self):
        return self.__rate


    def setRate(self, rate):
        if rate != self.__rate:
            self.__rate = rate
            self.emit(SIGNAL("rateChanged"), self.__rate)


def rateChanged(value):
    print "TaxRate changed to %.2f%%" % value

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

这里迷惑人的是,SIGNAL("rateChanged")里的rateChanged,不是那个外部函数, rateChanged(value),而是和前面的atzero一样,是一个信号。所以,事先也要是必须要初始化的:

rateChanged = pyqtSignal(float)

然后,setRate方法里的emit方法,要改成:self.rateChanged.emit(self.__rate)。用rateChanged这个信号将self.__rate发射出去,发射到 rateChanged(value)这个函数里。因此,最后的代码:

================================================
vat = TaxRate()
vat.connect(vat, SIGNAL("rateChanged"), rateChanged)
vat.setRate(17.5)    # No change will occur (new rate is the same)
vat.setRate(8.5)     # A change will occur (new rate is different)
================================================
vat对象的connet方法,要改成:vat.rateChanged.connect(rateChanged),vat后面跟的rateChanged是信号,connect后面跟的rateChanged,是那个外部函数 rateChanged(value)。

第六个坑:

书中的源代码文件是signals.pyw,必须另存为signals.py,这个程序在命令提示符中显示出输出的内容。为什么会这样?因为pyw文件是静默模式,所有向原有的 stdout 和 stderr 的输出都无效,所有从原有的 stdin 的读取都只会得到 EOF

最后,上个图,理解一下ZeroSpinBox和 Form3通过信号和槽的关联方式:




需要特别注意的是,在运行程序的时候,在命令行下边,要用完整的 python signals.py 参数  运行,单独运行signals.py,参数无法接收。目前我也没找到好的解决办法。
掌握.NET表单开发:深入Form类与控件 本文详细介绍了.NET环境下表单应用程序的开发,从基础的窗体创建到高级的用户控件定制。文中强调了.NET Framework中Form类的重要性,并探讨了如何利用Visual Studio的Windows窗体设计器以及代码后台进行表单设计。同时,还涉及了如何通过继承和实例化Form类来创建具有特定行为和外观的表单对象。 阅读详情

相关推荐

匈牙利算法解决指派问题清晰流程

匈牙利算法解决指派问题清晰流程 百度词条上,指派问题(Assignment problem)是这么定义的:在满足特定指派要求条件下,使指派方案总体效果最佳。如:有若干项工作需要分配给若干人(或部门)来完成;有若干项合同需要选择若干个投标者来承包:有若干班级需要安排在若干教室里上课等。   一、做减法(归约): 行归约:每行元素减去该行最小元素。 列归约:每行元素减去该行最小元素。

siss0siss的博客 6万+

表单

可以收集用户的信息和反馈意见,是网站管理者与浏览者之间沟通的桥梁。 有两个部分一种是一部分是HTML源代码用于描述表单(例如,域,标签和用户在页面上看见的按钮)另一部分是脚本或应用程序用于处理提交的信息 表单分为三大类 一 文本类 文本类又包括文本域框 input type = “text” / 密码框input type = “password” 隐藏域input type = “hidden...

cqzdmm的博客 1089

【无线通信】射频杂散(RF Spurious Emissions)

射频杂散(RF Spurious Emissions)是指在无线通信系统中,除了在指定频率范围内的预期信号之外,任何不需要的或非预期的射频信号。这些杂散信号可能会干扰其他通信系统,降低系统性能,并违反无线电通信法规。射频杂散通常包括谐波、次谐波、互调产物和其他非线性失真所产生的信号。

qq_38801607的博客 5427

react class组件form表单遇到的问题

1.表单确认按钮点击事件验证 handleSubmit = e => { e.preventDefault(); this.props.form.validateFields((err, values) => { if (!err) { console.log('Received values of form: ', values);

GJF_blog的博客 913

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装。

weixin_40132006的博客 2241

FFmpeg入门详解之110:RTSP协议讲解

TCP/IP 协议体系中的一个应用层协议,该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或UDP完成数据传输。HTTP与RTSP相比,HTTP传送HTML,而RTSP传送的是多媒体数据。正在上传…重新上传取消RTSP是基于文本的协议,采用ISO10646字符集,使用UTF-8编码方案。行以CRLF中断(\r\n:10,13:0x0A,0x0D),包括消息类型、消息头、消息体和消息长。

福优学苑@音视频+流媒体 2529

表单的类型

1.邮箱-表单<input type="email" />2.网址-表单 3.数字-表单 4.滑块5.搜索框。

jmz98的博客 493

【txt文本加密】使用 cryptography 库实现加密和解密

cryptography 库是一个强大的 Python 库,用于实现加密和解密功能。它提供了各种加密算法,包括对称加密、非对称加密、哈希函数等。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2667

HTML中几种常见的表单类型举例

HTML中几种常见的表单类型举例: 带边框的表单 在数据周围绘制一个带标题的框,主要用到<fieldset> </fieldset>标签和<legend> </legend>标签。其中<fieldset> </fieldset>标签是用来形成表格,<legend> </legend>标签是用来定义边框的标题。 举例代码如下: <!DOCTYPE html> <html lang="en">

qq_51735681的博客 2971

CARAFE轻量级上采样算子详解:从原理到YOLOv5/YOLOv8实战魔改全攻略

摘要: 本文探讨了CARAFE(内容感知特征重组)上采样算子在YOLOv5/YOLOv8目标检测模型中的应用。传统上采样方法(如最近邻插值)易丢失细节信息,而CARAFE通过内容自适应机制和大感受野特性,动态生成上采样核,显著提升小目标检测性能。文章详细解析了CARAFE的算法原理(核生成与特征重组两步),并提供了在YOLOv5/YOLOv8中集成的代码实现与配置修改方案。实验表明,引入CARAFE后模型mAP提升约0.6%,且保持轻量级优势。此外,文中还总结了训练调优技巧、部署优化方案及常见问题解决方法,

FJN110的博客 918

3D视觉实战之双目相机物体尺寸实时测量

视差图滤波能够将稀疏视差转变为稠密视差,并在一定程度上降低视差图噪声,改善视差图的视觉效果,但是比较依赖初始视差图的质量。的目标是获得左右两个相机的内参、外参和畸变系数,其中内参包括左右相机的fx,fy,cx,cy,外参包括左相机相对于右相机的旋转矩阵和平移向量,畸变系数包括径向畸变系数(k1, k2,k3)和切向畸变系数(p1,p2)以及其他一些畸变类型。:相比于昂贵的专业设备,便宜的双目摄像头可以显著降低成本,使得实时点云生成技术更加普及和经济实惠。

qq_53545309的博客 2100

HTML表单

HTML表单

qq_56515781的博客 260

分子动力学仿真软件:LAMMPS_(16).应用案例分析

通过以上四个应用案例,我们详细介绍了如何使用LAMMPS进行不同系统的分子动力学仿真。从简单的液体水仿真到复杂的纳米管仿真,每个案例都包含了详细的步骤说明和代码示例。读者可以通过这些示例实际操作并验证结果,从而更好地理解LAMMPS的功能和使用方法。希望这些案例能够为读者在分子动力学仿真领域的研究和应用提供帮助。

kkchenjj的博客 837

Django Form类详解

本节主要详细介绍Django框架中Form类的内容。Form类与Model类紧密关联,是构建Web应用的内部核心部件。

夏天又到了的专栏 1248

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Django 的 form类

Django 在表单中的角色处理表单是一件很复杂的事情。考虑一下Django 的Admin 站点,不同类型的大量数据项需要在一个表单中准备好、渲染成HTML、使用一个方便的界面编辑、返回给服务器、验证并清除,然后保存或者向后继续处理。Django 的表单功能可以简化并自动化大部分这些工作,而且还可以比大部分程序员自己所编写的代码更安全。Django 会处理表单工作中的三个显著不同的部分:准备数据、重

rorntuck7的专栏 596

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

midlet类,form类,canvas类,Graphics类

midlet类应该算是j2me程序的主类了,大概等同于vc中的mainFrame,用来对form或canvas的调度commandAction,与form类相对应得命令回调函数,重写它可以实现发生命令事件时候的动作。他的参数是Command类型,既为产生的命令form类可能属于一种比较简单的“视”类(姑且类比vc这么叫吧!)form.append方法可以向视中追加一行字符串,参数就是待追加的字符串

边陲小城 1449

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Django Form类 vs ModelForm类 对比教程​

本文对比了Django中的Form类和ModelForm类,从定义方式、字段处理、数据操作、适用场景、代码结构、性能与安全性等多个维度进行了详细分析。

YAnt的博客 605

Django-Form类

Django-Form类 创建Form类时,主要涉及到 【字段】 和 【插件】,字段用于对用户请求数据的验证,插件用于自动生成HTML; 1、Django内置字段如下: ​```python Field required=True, 是否允许为空 widget=None, HTML插件 label=Non...

ball4022的博客 269

C#在类中用调用Form的方法

class 你的类 { private Form1 frm; //构造函数 public 你的类( Form1 form) { frm = form; } //调用form方法 private void SendMessage...

weixin_30390075的博客 1546

Django中form类排版

在Django Book一书中提到,可以使用form类来更好的创建表单,完成与用户的交互。 相比其以往的方法,代码确实更加简洁,风格也好。但是,form类的排版及CSS样式的修改,由于教程不足,变得有些晦涩。 本文将详细介绍其挂钩CSS排版的方法。 Django Book中的方式: message = forms.CharField(widget=forms.Textarea)

MichZc.Teng 1818

C#外部类访问Form类的控件

1.将需要调用的控件Modifiers属性修改为Public; 2.在Form类下面添加实例化 public static Form1 form1; 3.在From1方法下给form1赋值 form1 = this; public partial class Form1:Form{ public static Form1 form1; public Form1(){ InitializeComponent(); form1 = this; } } ...

ipoler的博客 3482

form应用上bootstrop样式,form可以直接继承这个类

form应用上bootstrop样式,form可以直接继承这个类 # BootstropForm class BSForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 自定义操作 for f...

weixin_34336292的博客 394

Django Form 类深度使用指南

本教程系统讲解Django Form类的核心使用方法,涵盖表单定义、数据处理、模型集成、自定义验证等关键功能,提供企业级开发最佳实践方案,包含表单安全、性能优化、调试技巧等高级内容。

YAnt的博客 1240

【django】表单 Form类1(django.forms)

参考:http://docs.30c.org/djangobook2/chapter07/ Form 类 1.为要处理的HTML的`` `` 定义一个Form类,将类保存到forms.py中,forms.py与views.py同路径即可 from django import forms class ContactForm(forms.Form): subject = f

wendy的专栏 924

Django Form类清洗request.POST,出现数据丢失现象

1. 先说明一下我遇到的情况: 当在前端页面中POST提交的表单时,假设表单中有一个input标签,在后端定义了一个From类对request.POST进行清洗和验证,转换后的数据中中却不包含这个input的内容。 我就很迷,这咋回事啊。 POST函数的处理方法: def post(self, request): form = PerfectInfoForm(req...

weixin_41514525的博客 1018

画了张Form类的继承层次

今天在玩VS2005的Class Diagram 画了张Form类的继承层次感觉这个Class Diagram是方便很多.而起感觉很漂亮

format的博客 180
上一篇: linux
下一篇: 深度系统安装KDE桌面环境Plasma的方法
ceerfuce
博客等级 码龄8年 6粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值