我正在尝试根据前面小部件中动态设置的属性,找到一种方法来更新动态创建的小部件(可以删除)中的标签。
有没有办法自动和动态地将 pyqt 对象链接到其他小部件的属性,以便当我在任何地方更改值时,该对象会自行更新?
示例:对象 'a' 具有属性start
,bars
并且end
; bars
给定,start
由前一个对象获取(如果没有,则为 1),end
被计算。对象“b”start
取自a.end
,依此类推。
class myclass(object):
def __init__(self, referrer=None, value=1):
self.referrer=referrer
self.value=value
def _get_start(self):
if not self.referrer:
return 1
else:
return self.referrer.end+1
def _get_end(self):
return self.start+self.value-1
start=property(_get_start)
end=property(_get_end)
def create(value=1):
if not vList:
ref=None
else:
ref=vList[-1]
val=myclass(ref, value)
vList.append(val)
def showList():
for i in vList:
print 'item: %d\tstart: %d\tend: %d' % (vList.index(i),i.start, i.end)
vList=[]
如果我调用 create() 3 次,showList() 将显示:
item: 0 start: 1 end: 1
item: 1 start: 2 end: 2
item: 2 start: 3 end: 3
如果我将 vList[0].value 更改为 3:
item: 0 start: 1 end: 3
item: 1 start: 4 end: 4
item: 2 start: 5 end: 5
当我需要在 gui 中更新这些值时,问题就出现了(将其视为像这样的界面):每个水平小部件都有一个显示属性的标签start
、一个用于 的旋转框bars
和一个用于 的标签end
,并且只要有spinbox 值发生变化,每个后续小部件都应根据其先前的小部件更新其start
和属性,并在相关标签中显示它们。end
此外,当删除任何小部件时,所有后续小部件都应重新计算每个属性。
使用 getter/setter 来设置小部件下一个实例的标签中的值显然不能按我的需要工作,因为当我更改 any 时x.value
,以下实例'start
并且end
只有在召回时才会实际更新,AFAIU。我可以将每个新的小部件连接到它以前的(使用valueChanged()
)或创建一个函数来查找后续小部件并更新它们的属性,但这不是一个好的解决方案。
由于我对 python 几乎是新手(最重要的是:我不是程序员)我认为我忽略了一些关于以更好和最干净的方式“连接”变量的事情(可能与信号或线程有关?)。
考虑这些小部件实际上是另一个“主”小部件的子小部件,它们将具有相似的属性:start
取自其先前的主小部件(如果有),这是每个子小部件bars
中所有小部件的总和,这将是.bars
end
start+bars-a
谢谢!
(我希望你能明白我的意思,我的英语并不完美,而且由于我不是程序员,我的术语并不总是正确的)