畫面如下
我從ubuntu1410換到Debian7.7寫程式了,還是Debian穩定,而且文定多了
我在treeview_filechooser.py模組再新增一個MyThread執行續類別,處理播放圖片,開頭一定要加GObject.threads_init()
#此行一定要加,否則執行續,會停住
GObject.threads_init()
#執行續,不能restart,只能重新產生,並等run執行完,會自動KILL
class MyThread(Thread):
.......................
.....................
若讓主程式用迴圈處理,其他事就不能做了,迴圈若放到執行續,就能同時進行
好比一個人就只能同時作一件事,多一個人就能再做一件事,執行續就像幫手
1.執行續,一旦啟動,就不能停止,只能等run()跑完,他會自動KILL
2.既然不能停止,只能讓他不做事,設個IF,然後由bollean控制它(如下)
run()
for ............:
if(self.bollean)
...............
def do_run(self,b):#決定是否工作
self.bollean=b
3.執行續,不可能永遠存在run()跑完,他會自動KILL
錯誤
self.thread = MyThread(....)
self.thread.start()
...........................
#跑完,再啟動
self.thread.start()
正確
self.thread = MyThread(....)
self.thread.start()
...........................
#跑完,再啟動
self.thread = MyThread(....)
self.thread.start()
程式邏輯,當按下播放紐,啟動執行續,讓他取得開始播放位置,並計算列表長度,for逐一選中列表,
列表選中cursor-changed信號被觸發,信號連到調整圖片大小,中途想停止播放,設個IF來判斷(run如下)
def run(self):#執行續self.thread.start()執行的地方
try:
#while not self.stopped.wait(self.t):
#判斷播放完,self.player_number應設成0,在重播
if(self.player_number+1>=self.len):self.player_number=0
print("my thread start")
for x in range(self.player_number,self.len):
#因為thread一起動,便不能中止,指能讓run不做任何事,走完自動KILL
if(self.is_PLAY):
try:
#設定treeview選中項目,因為cursor-changed所以會發出信號,調整圖片
#Gdk.threads_enter()
#GObject.idle_add(self.tt.set_cursor(x))
self.tt.set_cursor(x)
#Gdk.threads_leave()
time.sleep(self.t)
except:self.stop()
#self.stopped.wait(1)
print("my thread stop")
except:pass
#讓執行續,快速結束
def stop(self):
self.stopped.set()
self.is_PLAY=False
#設定True或False,決定是否resize image
def set_PLAY(self,boolean):
self.is_PLAY=boolean
#設定播放號碼
def set_play_number(self,i):
self.player_number=i
def set_PLAY(self,boolean)設定是否設定列表,當使用者按停止self.is_PLAY為False,播放停止
def set_play_number(self,i)當使用者未按播放紐,選中列表,告訴run播放位置
def stop(self)讓執行續,快速結束,跟set_PLAY(False)一樣,多了self.stopped.set(),會更快結束
另外,ui檔用glade多了scale元件,scale放入調整的adjustment1,來控制速度,get_value()可取得調整值
沒有留言:
張貼留言