2017-05-24 116 views
1

我不明白为什么我的下面的tkinter脚本不能正常工作。当我运行它时,我发现它编译没有错误,但我实际上没有看到任何窗口打开。当我尝试打包文本输入字段时发生错误。任何帮助将不胜感激。Python Tkinter:无法在框架中插入文本输入框

from Tkinter import * 
import ttk 


main = Tk() 
main.title('Testing') 

topframe = Frame(main) 
topframe.pack(side = TOP) 

bottomframe = Frame(main) 
bottomframe.pack(side = BOTTOM) 


frame = Frame(main) 
frame.pack() 

Label(topframe, text="Date").grid(row=0) 
e1 = Entry(topframe) 
e1.insert(1, "May 24, 2017") 
e1.pack() 
main.mainloop() 

回答

1

实际上,当试图运行这样的东西时出现错误。

_tkinter.TclError: cannot use geometry manager pack inside .!frame which already has slaves managed by grid 

您需要注意如何使用您的布局管理器,如.pack, .grid, .place。检查此link有关几何管理器的信息。

变化:

Label(topframe, text="Date").grid(row=0)

要:

Label(topframe, text="Date").pack()

而且你的程序将运行正常。

这对我来说很好。注意在这一点上,你不需要导入ttk

from Tkinter import * 

main = Tk() 
main.title('Testing') 

topframe = Frame(main) 
topframe.pack(side = TOP) 

bottomframe = Frame(main) 
bottomframe.pack(side = BOTTOM) 

frame = Frame(main) 
frame.pack() 

Label(topframe, text="Date").pack() 
e1 = Entry(topframe) 
e1.insert(1, "May 24, 2017") 
e1.pack() 

main.mainloop() 

结果:

enter image description here

1

任何一个小部件的所有孩子都必须使用相同的几何管理器。具体而言,您的topframe有一个使用.grid()的标签和使用.pack()的Entry;两个几何管理者将永远无法就小部件的定位达成一致。改变其中一个以匹配另一个,这是你的选择哪一个改变(事实上,topframe被包装到它的父母并不影响你的选择在这里)。