2017-12-07 19 views
0

그래서이 창을 항상 텍스트 위젯으로 만들고 싶습니다. 당신이 무슨 일을하는지Tkinter 텍스트 편집기 thats always on top

self.tb.focus_set() 

을 : 당신이 대신 호출 할 필요가 원하는 경우

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 (자기)'가하는 일은 무엇이라고 생각하니? –

답변

0

텍스트 위젯이 활성화 될 ... 임은이 위젯을 추가하려고하지만 다른 창을 만드는 유지 대신 바탕 화면에있는 모든 창 위에 같이 최상위 머무르는 있는 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)