2016-04-27 169 views
1

我有一個窗口,通過單擊按鈕來查詢DB2數據庫表,並將記錄提取到我的窗口。爲什麼Tkinter窗口凍結,從標題欄移動窗口,它開始工作然後

對於少數表格,在單擊查詢按鈕後,我可以正確地在窗口中獲取記錄。

但是對於很多其他表格,當我單擊查詢按鈕後,我的窗口會凍結。現在,當我通過標題欄使用鼠標按鈕移動窗口時,窗口很快就會解凍,我可以正確地從數據庫表中獲取所有記錄。

我正在顯示Text小部件中的每個記錄字段。

之前當我用Label小部件代替Text小部件時,我沒有看到這個問題。

這是我如何在運行時創建Text小部件。

fld_name = Text(self.response_frame, background='yellow', relief=GROOVE, 
         borderwidth=1, height=1) 
val_text = str(ibm_db.field_name(result, i)) # I am getting the value from DB2 database here 
fld_name.configure(width=len(val_text) + 5) # As the Text widget doesn't auto-resize, so I am configuring it's size. 
fld_name.insert(1.0, val_text) 
fld_name['state'] = 'disabled' 
fld_name.grid(column=i, row=j, sticky=(W, E)) 

請建議。

謝謝。

回答

0

您需要正確的前後插入或刪除從NORMALDISABLED(反之亦然)後尊重改變fld_name狀態的順序。

這意味着你的插入操作必須是這樣的:

fld_name.configure(state='normal') 
fld_name.insert(1.0, val_text) 
fld_name.configure(state='disabled') 

但仍這可能會導致您不希望的行爲,因爲線fld_name.configure(狀態=「正常」)假設你fld_name是相反的如我在上面的介紹段落中所述的狀態(DISABLED)。這意味着你將需要執行代碼的最後一次修改,它涉及創建fld_name方式:

fld_name = Text(self.response_frame, state = 'disabled', background='yellow', relief=GROOVE, borderwidth=1, height=1) 

正如你所看到的,你需要的只是在制定的過程中,以添加選項state = 'disabled'到尊重上面第一段的陳述。

因此,我們以連貫次序改變fld_name狀態:

DISABLEDNORMALDISABLED

請注意,如果在fld_name上面的行之後執行插入或數據的刪除fld_name.configure(state='disabled')那麼你將需要絕對恢復fld_name的狀態爲NORMAL。始終尊重這個答案第一段的陳述。