欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  部分核心代码解析
 
  共享类
 
  我们先来看看共享类。
 
  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)
 
  形成一个属性。具体哪里使用,我们后面会介绍。
 
  可能到这里你有点云里雾里的感觉,不要急,接下来的更精彩!

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h62395.shtml