2017-12-07 17 views
0

だから、私はこのウィンドウを常に上にあるテキストウィジェットにしたいと思っています。イムは、このウィジェットを追加しようとしているが、それは別のウィンドウを作成し続けて...Tkinterテキストエディタthats always on top

import tkinter as tk 
from tkinter import ttk 

class App(tk.Frame): 

    def __init__(self, master, *args, **kwargs): 
     tk.Frame.__init__(self, master, *args, **kwargs) 

     self.pack() 

     hello="hello" 

     self.tb = tk.Text(self) 
     self.tb.pack(expand=1, fill = tk.BOTH) 
     self.tb.insert(tk.END, hello) 

     topLevelWindow = tk.Toplevel(self) 
     # Make topLevelWindow remain on top until destroyed, or attribute changes. 
     topLevelWindow.attributes('-topmost', 'true') 

if __name__ == "__main__": 
    root = tk.Tk() 
    main = App(root) 
    root.mainloop() 
+2

別のウィンドウを作成し続けます。なぜなら、別のウィンドウを作成するからです。 'tk.Toplevel(self)'は何をしていると思いますか? –

答えて

0

あなたがテキストウィジェットをアクティブにしたい場合は、代わりにこれを呼び出す必要があります:あなたがやっている

self.tb.focus_set() 

何代わりに、デスクトップのすべてのウィンドウ上記のように、最上位のままウィンドウあるToplevelウィジェットを、作成され、あなたが削除する必要があります。

topLevelWindow = tk.Toplevel(self) 
    # Make topLevelWindow remain on top until destroyed, or attribute changes. 
    topLevelWindow.attributes('-topmost', 'true') 

また、あなたの全体のウィンドウでは、this answerに応じてあなたの 'メイン' にそのあなたのrootための代わりに行うことができますしたい場合:

root.call('wm', 'attributes', '.', '-topmost', '1') 

最後に持っている:

import tkinter as tk 
from tkinter import ttk 

class App(tk.Frame): 

    def __init__(self, master, *args, **kwargs): 
     tk.Frame.__init__(self, master, *args, **kwargs) 

     self.pack() 

     hello="hello" 

     self.tb = tk.Text(self) 
     self.tb.pack(expand=1, fill = tk.BOTH) 
     self.tb.insert(tk.END, hello) 

     self.tb.focus_set() 

if __name__ == "__main__": 
    root = tk.Tk() 
    root.call('wm', 'attributes', '.', '-topmost', '1') 
    main = App(root) 
    root.mainloop() 

また、他のウィジェットに焦点を合わせたくない場合:

widget.config(takefocus=False) 
関連する問題