[英]Why does this simple Python TK Gui progam take 100% CPU
我正在尝试构建一个非常简单的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个可以放置其他小部件的块,但是一旦添加第三个标签,就应该这样;
# 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中完成了布局,就可以将它们更改为更好的颜色)。 并且我向内部Frames添加了borderwidth
arg,以便可以看到SUNKEN浮雕。 我还调整了内部框架的位置,因为您在外部框架中的第一个Label与self.top
框架在同一网格位置。 另外,您试图将self.lbl
用于两个不同的Labels。
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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.