2016-09-01 55 views
0

我有一個合理數量的組件連接到一個窗口。我想在按下按鈕時更改這些組件的某些屬性。 但是,一次只在一個組件中執行此操作是一件無聊的工作,並且會涉及許多代碼行。 當信號被釋放時,可以使組件偵聽其他分量信號來執行任務嗎? 也就是說,就像觀察者模式一樣。 如果這是不可能的。對這些組件進行大規模更改的最佳方法是什麼?大規模更改組件屬性

例子:

enter image description here

Code UI

如果我想的「重置」按鈕被觸發時所有其他部件復位到初始狀態? 創建一個處理程序的按鈕信號,改變組件(條目,交換機,CheckBose,...)一次一個非常累人

+1

爲什麼不只是迭代所有的小部件並重置它們?在[entry1,entry2,entry3,...]中輸入:check.button.set_active(False)'等於checkbutton的entry.set_text('')'或等等很多努力,爲什麼不從你的XML文件重新加載整個事情? –

+0

這是一個替代方案。 我也可以使用'GtkBuilder.get_objects()'方法並創建'list comprehension',並只獲得我想要的組件。 但我很好奇你最後的建議。如何在XML中完成這項工作? –

+0

我不想在XML中做任何事情。我在說你可以'銷燬'窗口小部件並使用另一個'Gtk.Builder'來重新創建它們。 –

回答

0

這可能不是你想要的答案,但...

你可能在錯誤的地方進行優化。你的例子中的窗口需要大約6行非常直接的代碼來「重置」。相比於解決方案的好處這是微不足道的:

  • 代碼很容易後來理解上
  • 它也很容易修改以後(當如默認值變動)

這些比你最初編寫代碼花費的兩分鐘時間要重要得多 - 即使你讓表單更復雜也不太可能改變(儘管如果你最終得到的是一個滿屏的屏幕,我會質疑基本設計GtkEntries)。