2016-04-27 11 views
1

ボタンをクリックしてDB2データベーステーブルを照会しているウィンドウが開き、ウィンドウにレコードがフェッチされます。Tkinterウィンドウがフリーズし、タイトルバーからウィンドウを移動すると、それが動作し始めます。

テーブルの数が少ない場合、クエリボタンをクリックした後、私のウィンドウにレコードが正しく表示されます。

しかし、他の多くのテーブルでは、[クエリ]ボタンをクリックすると、ウィンドウがフリーズします。今、マウスボタンを使ってタイトルバーでウインドウを移動すると、ウインドウが素早くフリーズされ、データベーステーブルからすべてのレコードが正しく取得されます。

Textウィジェットに各レコードフィールドを表示しています。

以前、Textウィジェットの代わりにLabelウィジェットを使用していたときに、この問題は発生しませんでした。

これは、実行時に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

あなたが適切に前NORMALからDISABLED(またはその逆)への挿入または削除後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 = Text(self.response_frame, state = 'disabled', background='yellow', relief=GROOVE, borderwidth=1, height=1) 

あなたが見ることができるように、あなたは創造の瞬間にオプションstate = 'disabled'を追加するだけで必要があるために:これは、あなたのコードの最後の変更を実行する必要があります、それはあなたがfld_nameを作成する方法に関すること上記の最初の段落の声明を尊重する。あなたは上記の行の後fld_nameにデータの挿入や削除を行う場合は、その

DISABLEDNORMALDISABLED

注:

したがって、私たちは、コヒーレント順にfld_name状態を変更しますfld_name.configure(state='disabled')fld_nameの状態を完全に復元する必要があります。NORMAL。この答えの最初の段落のステートメントを常に尊重してください。

関連する問題