前のウィジェットで動的に設定されたプロパティに従って、動的に作成されたウィジェット(削除可能)内にあるラベルを更新する方法を見つけようとしています。
pyqtオブジェクトを他のウィジェットのプロパティに自動的かつ動的にリンクして、どこかで値を変更すると、そのオブジェクトが自動的に更新されるようにする方法はありますか?
例:オブジェクト'a'にはプロパティstart
がbars
あり、end
; bars
が与えられ、start
前のオブジェクト(またはNoneの場合end
は1)によって取得され、計算されます。オブジェクト'b'はstart
froma.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
、スピンボックスの値が変更されると、後続のすべてのウィジェットは、前のウィジェットに従ってプロパティとプロパティを更新し、相対ラベルに表示する必要があります。さらに、ウィジェットが削除されると、後続のすべてのウィジェットはすべてのプロパティを再計算する必要があります。start
end
getter / setterを使用してウィジェットの次のインスタンスのラベルに値を設定することは、必要に応じて明らかに機能しません。これx.value
は、次のインスタンスstart
を変更すると、end
実際にはリコールされたときにのみ更新されるためです。すべての新しいウィジェットを以前のウィジェットに接続するvalueChanged()
か(を使用して)、後続のウィジェットを検索してそれらのプロパティを更新する関数を作成することもできますが、それは良い解決策ではありません。
私はPythonにほとんど慣れていないので(最も重要です:私はプログラマーではありません)、変数をより適切でクリーンな方法で「接続」することについて何かを無視していると思います(おそらくシグナルやスレッドに関連していますか?)。
これらのウィジェットは、実際には別の「メイン」ウィジェットの子ウィジェットであり、同様のプロパティを持つことを考慮してください。start
以前のメインウィジェット(存在する場合)から取得されます。これは、すべての子ウィジェットbars
のすべての合計です。bars
end
start+bars-a
ありがとう!
(私が何を意味するのか理解していただければ幸いです。私の英語は完璧ではありません。私はプログラマーではないので、私の用語は必ずしも正しいとは限りません)