python中能够修改主窗口标题的属性是_在python中使用Tkinter编辑标题栏

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

1

2

3

4

5

6

7

8

9

10

11

12from 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")

来到这里,但我实际上正在寻找stackoverflow.com/questions/30009909/以防万一还有其他人

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

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

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

例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22from 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)。尽管两者最终都做同一件事,但是前者是调用该函数的正确方法。

是的,我只是在python ABC()。mainloop()中运行了这段代码,它完成了2件事,一个名为Simple Prog的窗口和另一个窗口,但只有带有" tk"的标题栏部分

@Dan:我的猜测是,因为您在创建主窗口之前先创建了一个框架,所以Tkinter会为您创建一个顶层窗口(或者可能只是一个无形的框架小部件)。您拥有代码的方式是错误的。在创建任何其他窗口之前,需要先创建根窗口。

我不确定我是否正确,但这是您想要的吗?

1

2root = tkinter.Tk()

root.title('My Title')

根是您创建的窗口,其余的很容易解释。

尝试类似:

1

2

3

4

5

6

7

8

9

10

11

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

现在您应该有一个带有标题的框架,然后可以为

如果您愿意,可以使用其他小部件。

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

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

1Frame.__init__(self, parent)

正在运行之前

1self.root = Tk()

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

1

2self.root = Tk()

Frame.__init__(self, parent)

为什么不是这种情况,我不

自己完成此操作后,您可以通过以下方式进行操作:

1

2

3

4

5

6

7

8

9

10

11from 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")

您将看到标题更改,并且不会看到两个窗口。我已经将parent保留为master,就像python库文档中的Tkinter参考资料一样。

那么,这篇文章与我发布的内容有何不同?

我的答案是几年前的,所以我不记得为什么-我的答案更接近OP样本,并保留在课堂上,但是如果有问题,可以建议将其作为对您的修改。不知道...

python GUI示例

这是一个例子:

1

2

3from tkinter import *;

screen = Tk();

screen.geometry("370x420"); //size of screen

Change the name of window

1screen.title('Title Name')

运行:

1screen.mainloop();

我不太确定这会增加其他答案之一吗

1widget.winfo_toplevel().title("My_Title")

更改widget是其子元素的Tk或Toplevel实例的标题。

另外,请参阅有关为何显示多个窗口的更多信息。

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

它似乎不起作用。我是否应该保留self.parent = Tk()?

是的,你是。我只说过将self.root.title更改为self.parent.title并删除self.root

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值