本文小编为大家详细介绍“pyqt5与html数据交互的原理是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“pyqt5与html数据交互的原理是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
部分核心代码解析
共享类
我们先来看看共享类。
class Myshared(QWidget):
finish = pyqtSignal(list)
def __init__(self):
super().__init__()
def PyQt52WebValue(self):
return "666"
def Web2PyQt5Value(self, str):
info = str.split()
fullinfo = "用户名:{},密码:{}".format(info[0], info[1])
QMessageBox.information(self, "从Web页面传值到PyQt5", fullinfo)
self.finish.emit(info)
value = pyqtProperty(str, fget=PyQt52WebValue, fset=Web2PyQt5Value)
在这个共享类里面我们比以前多了一个新的知识点:pyqtProperty。
使用pyqtProperty()函数定义新的PyQt属性。 它的使用方式与标准的Python property()函数相同。 事实上,以这种方式定义的PyQt属性也表现为Python属性。
那么问题又来了,什么是Python property()函数??
根据Python的帮助文档上的介绍,它的完全形式是这样的:
class property(fget=None, fset=None, fdel=None, doc=None)
作用是返回Python的某一个属性。
fget是获取属性值的函数。 fset是用于设置属性值的函数。 fdel是用于删除属性值的函数。 doc为该属性创建了一个docstring。
典型用法是定义可被管理的属性x:
class C:
def __init__(self):
self._x = None
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
x = property(getx, setx, delx, "I'm the 'x' property.")
如果c是C的实例,c.x将调用getter,c.x = value将调用setter和del c.x将调用delx。
如果给定,doc将是property属性的docstring。 否则,该属性将复制fget的docstring(如果存在)。
这使得使用property()作为装饰器可以轻松创建只读属性:
class Parrot:
def __init__(self):
self._voltage = 100000
[email?protected]
def voltage(self):
"""得到当前voltage的值"""
return self._voltage
@property装饰器将voltage()方法转换为具有相同名称的只读属性。
属性对象具有可用作装饰器的getter,setter和deleter方法,这些方法创建属性的副本,并将相应的访问函数设置为装饰函数。举例如下:
class C:
def __init__(self):
self._x = None
[email?protected]
def x(self):
"""我是'x'属性"""
return self._x
[email?protected]
def x(self, value):
self._x = value
[email?protected]
def x(self):
del self._x
此代码与第一个示例完全等效:
x = property(getx, setx, delx, "I'm the 'x' property.")
请务必为其他函数指定与原始属性相同的名称(在本例中为x)。
返回的属性对象还具有与构造函数参数对应的属性fget,fset和fdel。
在PyQt5中,它是这么用的:
PyQt5.QtCore.pyqtProperty(type[, fget=None[, fset=None[, freset=None[, fdel=None[, doc=None[, designable=True[, scriptable=True[, stored=True[, user=False[, constant=False[, final=False[, notify=None[, revision=0]]]]]]]]]]]]])
感觉很复杂!
创建一个既作为Python属性又作为PyQt属性的属性。
参数:
type - 属性的类型。 它是Python类型对象或字符串。
fget - 用于获取属性值的,可选。
fset - 用于设置属性值的,可选。
freset - 用于将属性值重置为其默认值的,可选。
fdel - 用于删除属性的,可选。
doc - 属性的docstring,可选。
designable - 设置Qt DESIGNABLE标志,可选。
scriptable - 设置Qt SCRIPTABLE标志,可选。
stored - 设置Qt STORED标志,可选。
user - 设置Qt USER标志,可选。
constant - 设置Qt CONSTANT标志,可选。
final - 设置Qt FINAL标志,可选。
notify - 未绑定通知信号,可选。
revision - 导出到QML的修订版。
返回类型:属性对象。
也可以使用pyqtProperty()作为装饰器,方法与标准Python property()函数相同。 以下示例显示如何使用getter和setter定义int属性:
from PyQt5.QtCore import QObject, pyqtProperty
class Foo(QObject):
def __init__(self):
QObject.__init__(self)
self._total = 0
[email?protected](int)
def total(self):
return self._total
[email?protected]
def total(self, value):
self._total = value
好了,现在我们回过头来再看下我们自己定义的共享类。
def PyQt52WebValue(self):
return "666"
写上,但是后面我们没用。
def Web2PyQt5Value(self, str):
info = str.split()
fullinfo = "用户名:{},密码:{}".format(info[0], info[1])
QMessageBox.information(self, "从Web页面传值到PyQt5", fullinfo)
self.finish.emit(info)
当我们得到从Web页面传来值的时候,我们处理一下,分成用户名和密码,并将其通过自定义信号发射出去。
value = pyqtProperty(str, fget=PyQt52WebValue, fset=Web2PyQt5Value)
读到这里,这篇“pyqt5与html数据交互的原理是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。