2

(2番目の)tkinterウィンドウがあります。これを開くと、フォーカスが取得されませんが、最初のウィンドウはフォーカスされたままになります(ただし、2番目のウィンドウは他のウィンドウの前に表示されます)。入力できるテキストボックスが含まれていますが、入力するにはダブルクリックする必要があります。

ウィンドウを開くときにテキストボックスのフォーカスを合わせるにはどうすればよいですか?

私の 試み: textbox.focus_set()、、 window.grab_set()window.focus_set()

それらのどれも私がやりたいことをしませんでした。

編集:代わりに、メインウィンドウ.focus_set()を閉じるときに(そしてそのときだけ)エラーが発生します:can't invoke "focus" command: application has been destroyed

これは私の現在のコードです(tkWinメインウィンドウ、tkcWin2番目のウィンドウです):

def click(self, field):
    import _tkinter
    if field != None:
        try:
            self.tkcWin = Tk()#creating window
            self.tkcWin.focus()
            self.tkcWin.title(field)
            self.tkcWin.geometry('300x100')
            self.mainframe = Frame(master=self.tkcWin,background="#60BF98")
            self.mainframe.place(x=0, y=0, width=300, height=300)
            self.textb = Text(master=self.mainframe)
            self.textb.place(x=0, y=50)
            self.textb.bind("<Return>",lambda a: self.setM(field))
            self.textb.bind("<Return>",lambda a: self.tkcWin.destroy(),True)
            self.tkcWin.grab_set()
            self.tkWin.wait_window(self.tkcWin)
            self.textb.focus_set()
            hwnd = self.tkcWin.winfo_id()
            ctypes.windll.user32.SetFocus(hwnd)
            self.tkcWin.mainloop()
        except _tkinter.TclError:
            self.tkcWin.destroy()
4

1 に答える 1

1

deiconify()セカンダリウィンドウのメソッドを呼び出してから、ウィジェットのfocus_set()メソッドを呼び出すだけでよいことがわかります。

toplevel.deiconify()
text.focus_set()

Windowsの元の回避策は次のとおりです(推奨されなくなりました)。

上部に追加することimport ctypes から始めます。
先に進み、次のようにウィジェットに焦点を合わせますtext.focus_set()
。2番目のウィンドウのhwndを取得します。top_hwnd = toplevel.winfo_id()
最後に次のコマンドで2番目のウィンドウをアクティブにします。ctypes.windll.user32.SetFocus(top_hwnd)

于 2012-12-13T20:13:41.747 に答える