【问题标题】:Tkinter text editor thats always on topTkinter 文本编辑器总是最重要的
【发布时间】:2017-12-08 03:31:35
【问题描述】:

所以我只想让这个窗口成为一个始终位于顶部的文本小部件。我试图添加这个小部件,但它一直在创建另一个窗口......

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()

【问题讨论】:

  • 它不断创建另一个窗口,因为......它创建了另一个窗口。你认为tk.Toplevel(self) 会做什么?

标签: python oop tkinter


【解决方案1】:

如果您希望您的文本小部件处于活动状态,则需要调用它:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2011-01-27
    • 1970-01-01
    相关资源
    最近更新 更多