75

我正在尝试向窗口添加自定义标题,但我遇到了麻烦。我知道我的代码不正确,但是当我运行它时,它会创建 2 个窗口,一个只有标题 tk,另一个更大的窗口带有“Simple Prog”。如何使 tk 窗口具有标题“Simple Prog”而不是新的附加窗口。我不认为我应该有 Tk() 部分,因为当我在我的完整代码中有它时,会有一个错误

from tkinter import Tk, Button, Frame, Entry, END

class ABC(Frame):
    def __init__(self,parent=None):
        Frame.__init__(self,parent)
        self.parent = parent
        self.pack()
        ABC.make_widgets(self)

    def make_widgets(self):
        self.root = Tk()
        self.root.title("Simple Prog")
4

12 回答 12

92

如果您不创建根窗口,Tkinter 会在您尝试创建任何其他小部件时为您创建一个。因此,在你的 中__init__,因为你在初始化框架时还没有创建根窗口,所以 Tkinter 会为你创建一个。然后,您调用make_widgetswhich 创建第二个根窗口。这就是为什么您会看到两个窗口。

一个编写良好的 Tkinter 程序应该总是在创建任何其他小部件之前显式地创建一个根窗口。

当您修改代码以显式创建根窗口时,您最终会得到一个具有预期标题的窗口。

例子:

from tkinter import Tk, Button, Frame, Entry, END

class ABC(Frame):
    def __init__(self,parent=None):
        Frame.__init__(self,parent)
        self.parent = parent
        self.pack()
        self.make_widgets()

    def make_widgets(self):
        # don't assume that self.parent is a root window.
        # instead, call `winfo_toplevel to get the root window
        self.winfo_toplevel().title("Simple Prog")

        # this adds something to the frame, otherwise the default
        # size of the window will be very small
        label = Entry(self)
        label.pack(side="top", fill="x")

root = Tk()
abc = ABC(root)
root.mainloop()

还要注意使用self.make_widgets()而不是ABC.make_widgets(self)。虽然两者最终都做同样的事情,但前者是调用函数的正确方法。

于 2010-03-08T02:06:21.890 回答
75

这里很好很简单。

root = tkinter.Tk()
root.title('My Title')

root是您创建的窗口并root.title()设置该窗口的标题。

于 2017-11-07T00:44:25.550 回答
16

尝试类似:

from tkinter import Tk, Button, Frame, Entry, END

class ABC(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()        

root = Tk()
app = ABC(master=root)
app.master.title("Simple Prog")
app.mainloop()
root.destroy()

现在您应该有一个带有标题的框架,然后您可以根据需要为不同的小部件添加窗口。

于 2010-03-11T13:30:18.677 回答
4

python图形用户界面示例


这是一个例子:

from tkinter import *;
screen = Tk();
screen.geometry("370x420"); //size of screen

更改窗口名称

  screen.title('Title Name')

运行:

screen.mainloop();
于 2019-10-12T17:37:49.613 回答
4

必须强调的一点是: .title() 方法必须在 .mainloop() 之前

例子:


from tkinter import *

# Instantiating/Creating the object
main_menu = Tk()

# Set title
main_menu.title("Hello World")

# Infinite loop
main_menu.mainloop()

否则,可能会出现此错误:

File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/__init__.py", line 2217, in wm_title
    return self.tk.call('wm', 'title', self._w, string)
_tkinter.TclError: can't invoke "wm" command: application has been destroyed

并且标题不会显示在顶部框架上。

于 2020-12-12T20:51:00.127 回答
2

我发现这有效:

window = Tk()
window.title('Window')

也许这有帮助?

于 2020-04-02T00:00:49.090 回答
1

刚刚自己完成了这个,你可以这样做:

from tkinter import Tk, Button, Frame, Entry, END

class ABC(Frame):
    def __init__(self, parent=None):
        Frame.__init__(self, parent)
        self.parent = parent
        self.pack()
        ABC.make_widgets(self)

    def make_widgets(self):
        self.parent.title("Simple Prog")

您将看到标题更改,并且不会出现两个窗口。我在 python 库文档中的 Tkinter 参考资料中留下了我parent的原样。master

于 2012-12-28T20:14:14.183 回答
1

对于遇到打开两个窗口的问题并遇到此问题的任何人。这是我偶然发现解决方案的方式。

这个问题中的代码产生两个窗口的原因是因为

Frame.__init__(self, parent)

之前正在运行

self.root = Tk()

简单的解决方法是在运行 Frame.__init_() 之前运行 Tk()

self.root = Tk()
Frame.__init__(self, parent)

为什么会这样,我不完全确定。

于 2016-08-22T19:20:37.970 回答
1

简易方法:

root = Tk()
root.title('Hello World')
于 2020-07-27T17:20:44.203 回答
0

self.parent 是对实际窗口的引用,因此 self.root.title 应该是 self.parent.title,而 self.root 不应该存在。

于 2010-03-07T08:36:54.633 回答
0
widget.winfo_toplevel().title("My_Title")

更改作为子项的其中一个TkToplevel实例的标题widget

于 2018-01-29T23:03:58.013 回答
0

我找到了一个可以帮助您的解决方案:

from tkinter import Tk, Button, Frame, Entry, END

class ABC(Frame):
    def __init__(self,master=None):
        super().__init__(master)
        self.pack()
        self.master.title("Simple Prog")
        self.make_widgets()

    def make_widgets(self):
        pass

root = Tk()
app = ABC(master=root)
app.mainloop()

发现于:docs.python.org

于 2021-04-03T22:55:24.633 回答