在Python中使用Tkinter编辑标题栏
我想给一个窗口加个自定义标题,但遇到了一些问题。我知道我的代码不对,但运行的时候却出现了两个窗口,一个只有“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")
12 个回答
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()
现在你应该有一个带标题的框架了,接下来如果你想的话,可以在里面添加不同的小窗口来放置各种小部件。
93
如果你不自己创建一个主窗口,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)
。虽然这两种方式最终都能实现相同的效果,但前者是调用这个函数的正确方式。
94
这里很简单明了。
root = tkinter.Tk()
root.title('My Title')
root
是你创建的窗口,而 root.title()
用来设置这个窗口的标题。