作者eaden (evenrain)
看板Python
標題Re: [問題] QThread: Destroyed while thread is sti
時間Thu Jun 21 18:28:21 2012
※ 引述《eaden (evenrain)》之銘言:
: 大家好,我是個 python 新手~所以萬一我問的問題太笨,請鞭小力一點 T_T
: 目前是做登入的功能,但是偷懶不想自己維護帳號密碼,
: 但是程式也會需要用到 FTPS,所以就做個登入視窗使用者抓 windows 的帳號
: 密碼讓 user 自己輸入,再藉由是否成功連線來判定登入與否
: main.py 是主程式宣告了 DialogLogin(QDialog)
: 跟 MainWindow(QMainWindow) 兩個 UI 物件,一開始只會顯示 Dialog
: 使用者填寫密碼後按確定 會呼叫 login 函式
: 裏頭會執行 FtpsQThread 這個 QThread 連線 ftp
: 再依據結果決定顯示 QMessageBox 或是切換到 MainWindows
: 不過執行結果卻是 QThread: Destroyed while thread is still running
: 有朋友跟我說大概是生命週期的問題,不過我不確定我哪裡錯了
: 請大家幫我看看~ m(_ _)m
: 程式碼: https://dl.dropbox.com/u/1245969/src.7z
自己回自己..
我剛剛亂試把原先的
def login(thread):
thread = FtpsQThread(uname, pwd)
thread.dataReady.connect(get_login, Qt.QueuedConnection)
thread.start()
if __name__ == '__main__':
dl = DialogLogin()
dl.ui.buttonBox.accepted.connect(login)
改成
def login(thread):
thread.start()
if __name__ == '__main__':
dl = DialogLogin()
thread = FtpsQThread(uname, pwd)
thread.dataReady.connect(get_login, Qt.QueuedConnection)
dl.ui.buttonBox.accepted.connect(login)
這樣就好了 @@
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.190.212
→ legnaleurc:不要繼承 QThread ... 06/21 21:08
→ eaden:有甚麼原因不建議繼承 QThread 嗎 @@? 06/22 13:36
→ eaden:原來是因為 qthread 是一個 concrete class 了... 06/22 14:44