在python中使用Tkinter编辑标题b

2024-04-25 17:38:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我想给一个窗口添加一个自定义标题,但遇到了问题。我知道我的代码不对,但当我运行它时,它会创建两个窗口,一个窗口只有标题tk,另一个窗口更大,显示“Simple Prog”。如何使tk窗口的标题为“Simple Prog”,而不是新的附加窗口。我不认为我应该有Tk()部分,因为当我在完整的代码中有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")

Tags: 代码self标题makeinitdefrootwidgets
3条回答

如果不创建根窗口,Tkinter将在尝试创建任何其他小部件时为您创建一个根窗口。因此,在您的__init__中,由于在初始化帧时尚未创建根窗口,Tkinter将为您创建一个根窗口。然后,调用make_widgets,创建一个第二个根窗口。这就是你看到两扇窗户的原因。

编写良好的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)。虽然两者最终都做了相同的事情,但前者是调用函数的正确方法。

尝试以下方法:

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

现在您应该有一个带有标题的框架,然后您可以为 如果你喜欢,可以用不同的小部件。

我不确定我说的对不对,但这是你想要的吗?

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

根目录是您创建的窗口,其余的都很简单。

相关问题 更多 >