gpt4 book ai didi

python - 为什么这个简单的 Python TK Gui 程序占用 100% CPU

转载 作者:太空宇宙 更新时间:2023-11-04 10:20:22 28 4
gpt4 key购买 nike

我正在尝试构建一个非常简单的 GUI,以前用这种方式完成过,从来没有问题。现在,在 Mac 上,我似乎无法让它工作。

这是代码

from Tkinter import *

class App:
def __init__(self, master):

# Gui Creation Block
frame = Frame(master, bd=2, relief=SUNKEN)
self.master = master

self.top = Frame(frame, height=150, width=700, relief=SUNKEN)
self.left = Frame(frame , height=400, width=200, relief=SUNKEN)
self.right = Frame(frame, height=400, width=500, relief=SUNKEN)

self.top.grid(row=0, column=0, columnspan=2)

self.left.grid(row=1, column=0)
self.right.grid(row=1, column=1)

# Sample Label
self.lbl = Label(frame, text="Log file locaction" )
self.lbl.grid(row=0, column=0)

self.top.pack()

frame.pack()

# Run the programs
root = Tk()
app = App(root)

root.mainloop()

我一运行它,CPU 使用率就飙升至 100% 并一直保持到我硬杀死在那里运行的 python 实例。如果我注释掉标签位,那不会发生。那么这里有什么问题呢?

------更新------

好吧,改变了文件定位器的东西是的,那是一个困惑的东西。从顶部删除 pack() 解决了 100% cpu 问题。

然而,它仍然没有像我想要的那样表现。

    self.top = Frame(frame,  bg="black", height=150, width=700, relief=SUNKEN)
self.left = Frame(frame , height=400, width=200, relief=SUNKEN)
self.right = Frame(frame, height=400, width=500, relief=SUNKEN)

应该创建 3 个 block ,我可以在其中放置其他小部件,但是一旦我添加了第三个标签,就像这样;

    # Sample Label
self.lbl = Label(self.top, text="Top" )
self.lbl.pack()

# Sample Label
self.lbl2 = Label(self.left, text="Left" )
self.lbl2.pack()

# Sample Label
self.lbl3 = Label(self.right, text="Right" )
self.lbl3.pack()

它将我的整个应用程序调整为最小尺寸。我认为内部小部件不会更改它们的父容器是错误的还是我犯了另一个错误?

最佳答案

dsgdfg 和 Jkdc 所说的:您同时拥有 self.top.grid()self.top.pack()
不要那样做!正如您所发现的,当您在一个父级中混合使用 pack()grid() 时,Tkinter 表现不佳。

至于你的更新...

Tkinter Frame 会自动调整自身大小以适应其内容。大多数情况下这是可取的,但幸运的是,当您想要使用固定的帧大小时,有一种方法可以覆盖该行为。

这是您的代码的一个略微修改版本,它为框架使用不同颜色的背景,以便更容易看出哪个框架在哪里。 (是的,那些颜色看起来很糟糕,但是一旦您在 GUI 中完成布局,您就会将它们更改为更好的颜色)。我在内部框架中添加了一个 borderwidth arg,以便可以看到 SUNKEN 浮雕。我还稍微调整了内部框架的位置,因为您在外部框架中的第一个标签与 self.top 框架处于相同的网格位置。此外,您尝试将 self.lbl 用于两个不同的标签。

from Tkinter import *

class App:
def __init__(self, master):
self.master = master

# Gui Creation Block
master.title("LumenScriptor")
frame = Frame(master, bd=2, relief=SUNKEN)
frame.pack()

self.top = Frame(frame, bg="red", height=150, width=700, relief=SUNKEN, borderwidth=2)
self.left = Frame(frame, bg="yellow", height=400, width=200, relief=SUNKEN, borderwidth=2)
self.right = Frame(frame, bg="blue", height=400, width=500, relief=SUNKEN, borderwidth=2)

self.top.grid(row=0, column=1, columnspan=2)
self.left.grid(row=1, column=1)
self.right.grid(row=1, column=2)

self.top.pack_propagate(0)
self.left.pack_propagate(0)
self.right.pack_propagate(0)

# Sample Label
self.lbl = Label(frame, text="Log file location")
self.lbl.grid(row=0, column=0)

# Sample Label
self.lbl1 = Label(self.top, text="Top" )
self.lbl1.pack()

#Sample Label
self.lbl2 = Label(self.left, text="Left" )
self.lbl2.pack()

# Sample Label
self.lbl3 = Label(self.right, text="Right" )
self.lbl3.pack()

# Run the programs
root = Tk()
app = App(root)

root.mainloop()

关于python - 为什么这个简单的 Python TK Gui 程序占用 100% CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32629112/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com