Re: [問題] PyQt: 如何使兩個widget連動?
※ 引述《Landau (賴宏道)》之銘言:
: 我使用QDoubleSpinBox和QSlider
: 希望使QDoubleSpinBox的值(小數)和QSlider的位置比例一致
: 我使用valueChanged事件,當值改變時就改變某個data member,
: 然後根據這個data member去設定這兩個widget的值,
: 可是發生了很奇怪的事,
: 似乎無法設置到某個值,在我這裡是29跟57,58(或者說,到了28跟56就上不去了)
: 希望高手給點意見,關於這個問題或如何繞過這個問題,
: 謝謝。
: 這是程式碼
: http://codepad.org/c5QuIj64
建議不要讓兩個 widget 直接連動
中間加個 lock 擋住
你目前的連動會形成 signal 循環 (如下圖)
valueChanged
spinbox ----------------> changeNum_spinbox(v)
^ /
\----------\ /----------/ setValue
\ /
X
/ \
/----------/ \----------\ setValue
v \
slider -----------------> changeNum_slider(v)
valueChanged
可以改成
valueChanged
spinbox ----------------> changeNum_spinbox(v)
|
lock ?
-------------------------/ \----> ignore
/ off on
\
--> lock on --> setValue --> lock off
/
\ off on
-------------------------\ /----> ignore
lock ?
|
slider -----------------> changeNum_slider(v)
valueChanged
上面是簡單的例子
要再深入可以朝 model-view-controller 之類的設計模式去實作
======================= 廢話分隔線 =======================
原po程式最簡單的修正方式
就是加入四捨五入的運算 --> round
把原來的 int(self.num*100)
改成 int(round(self.num*100))
就大功告成了~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.195.34.149
→
04/30 18:32, , 1F
04/30 18:32, 1F
→
04/30 18:33, , 2F
04/30 18:33, 2F
推
04/30 18:36, , 3F
04/30 18:36, 3F
→
04/30 18:37, , 4F
04/30 18:37, 4F
→
04/30 23:10, , 5F
04/30 23:10, 5F
→
05/04 19:52, , 6F
05/04 19:52, 6F
→
05/04 19:52, , 7F
05/04 19:52, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):