在python中使用Tkinter编辑标题b
我正在尝试向窗口添加自定义标题,但遇到了麻烦。 我知道我的代码不正确,但是当我运行它时,它将创建2个窗口,一个仅带有标题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")
Dan asked 2020-01-07T05:45:03Z
8个解决方案
83 votes
如果您没有创建根窗口,当您尝试创建任何其他窗口小部件时,Tkinter会为您创建一个。 因此,在您的self.make_widgets()中,由于初始化框架时尚未创建根窗口,因此Tkinter将为您创建一个根窗口。 然后,您调用ABC.make_widgets(self),它将创建第二个根窗口。 这就是为什么您看到两个窗口的原因。
编写良好的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)。尽管两者最终都做相同的事情,但前者是调用函数的正确方法。
Bryan Oakley answered 2020-01-07T05:45:41Z
25 votes
我不确定我是否正确,但这是您想要的吗?
root = tkinter.Tk()
root.title("My Title")
根是您创建的窗口,其余的很容易说明。
user8879510 answered 2020-01-07T05:46:05Z
13 votes
尝试类似的方法:
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()
现在,您应该有一个带有标题的框架,然后可以为如果您愿意,可以使用其他小部件。
lugte098 answered 2020-01-07T05:46:29Z
1 votes
自己完成此操作后,您可以通过以下方式进行操作:
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。
Danny Staple answered 2020-01-07T05:46:54Z
1 votes
对于遇到打开两个窗口的问题并遇到此问题的任何人。 这是我偶然发现解决方案的方式。
这个问题中的代码产生两个窗口的原因是
Frame.__init__(self, parent)
正在运行之前
self.root = Tk()
简单的解决方法是在运行Frame .__ init __()之前运行Task()。
self.root = Tk()
Frame.__init__(self, parent)
为什么不是这种情况,我不确定。
Rethipher answered 2020-01-07T05:47:31Z
0 votes
self.parent是对实际窗口的引用,因此self.root.title应该是self.parent.title,而self.root不应该存在。
Colin Valliant answered 2020-01-07T05:47:52Z
0 votes
widget.winfo_toplevel().title("My_Title")
更改Tk为子代的Tk或Toplevel的标题。
Nae answered 2020-01-07T05:48:12Z
0 votes
python GUI示例
这是一个例子:
from tkinter import *;
screen = Tk();
screen.geometry("370x420"); //size of screen
更改窗口名称
screen.title("Title Name")
运行:
screen.mainloop();
123 answered 2020-01-07T05:48:45Z