2017-05-24 260 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被包裝到它的父母並不影響你的選擇在這裏)。