当您使用 Qt_Designer 或 Qt_Creator 设计表单时,任何给定小部件的 objectName 始终设置为某物。但是,如果您在代码中创建一个小部件并且稍后需要 objectName,则必须明确分配它。那么小部件分配至少需要两行代码。这看起来非常不雅观。
例子:
button1 = QPushButton('button caption') # at this point objectName is some kind of empty string
button1.setObjectName('button1')
Run Code Online (Sandbox Code Playgroud)
如果您稍后需要查找小部件(即使用 findChild),您必须设置 objectName,否则您就不走运了。
有什么方法可以在没有额外代码行的情况下自动设置 objectName 吗?我查看了PyQt5 参考指南,找不到这样的功能。一个类似的问题被要求在代码审查,但没有得到回应。两行代码并不是世界末日,但似乎是多余的。不知何故,我需要为 Python(第一行)和 Qt 两次分配这个名称。
我想根据用户输入对对象列表进行排序,其中我允许按 ASC 顺序对某些列进行排序,而按 DESC 顺序对其他列进行排序(该字段是字符串/数字 - 但对于数字没有问题)。
示例类和对象列表如下所示:
from pydantic import BaseModel
class Person(BaseModel):
firstname: str
lastname: str
weight: float
people = [
Person(firstname="John", lastname="Snow", weight=100.1),
Person(firstname="Matthew", lastname="Smith", weight=98.7),
# And more...
]
Run Code Online (Sandbox Code Playgroud)
所以问题是我想按名字 ASC、姓氏 DESC (以及其他字段也是 DESC 或 ASC)对对象进行排序。
我试着这样做people.sort(lambda person: (-person.firstname, person.lastname))
但我得到了TypeError: bad operand type for unary -: 'str'。