热门关键字:
jquery > jquery教程 > jquery教程 > pyqt5与html数据交互原理

pyqt5与html数据交互原理

418
作者:管理员
发布时间:2021/7/20 16:43:20
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=5111
  部分核心代码解析


  共享类


  我们先来看看共享类。


  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)


  形成一个属性。具体哪里使用,我们后面会介绍。


  可能到这里你有点云里雾里的感觉,不要急,接下来的更精彩!




如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:jquery
友荐云推荐