2014-09-10 16 views
0

我是Python新手,無法使用包佈局。我有40個字母,我想做4行,每行包含10個字母。tkinter:如何使用包佈局

這裏是我的代碼:

import random 
from tkinter import *  

root = Tk() 

w = Label(root, text="GAME") 
w.pack(side=TOP) 

# there are 40 tiles 
tiles_letter = ['a', 'b', 'c', 'c', 'c', 'd', 'd', 'e', 'e', 'e', 'e', 'f', 'f', 'g', 'g', 'h', 'i', 'j', 'k', 'k', 'a', 'b', 'c', 'c', 'c', 'd', 'd', 'e', 'e', 'e', 'e', 'f', 'f', 'g', 'g', 'h', 'i', 'j', 'k', 'k'] 

tiles_make_word = [] 

def add_letter(): 
    if not tiles_letter: 
     return 
    rand = random.choice(tiles_letter) 
    tiles_make_word.append(rand) 
    print(len(tiles_make_word)) 
    tile_frame_column = Label(root, text=rand, bg="red", fg="white") 
    tile_frame_column.pack(side=LEFT, padx=5, pady=10) 
    tiles_letter.remove(rand) # remove that tile from list of tiles 
    if len(tiles_make_word) % 10 == 0: 
     separator = Frame(height=100) 
     separator.pack(fill=X, padx=5, pady=5) 
    root.after(500, add_letter) 

root.after(500, add_letter) 

root.mainloop() 

問題是每一個10個字母后,它會創建一個新的行,但它沒有正確奠定了。它看起來更像是之字形或對角線,而不是直接在上面一排的下面。有人可以告訴我代碼有什麼問題,以及我可以如何解決它?我很困惑,試圖用「after」方法創建新行。也許這個錯誤與此有關。希望這很簡單。我一直堅持這幾個小時。

謝謝

回答

1

試試這個。

問題是您創建了很多小部件並將其打包到根目錄,而我們可以創建一個包含幀的frameContainer。所以我們將標籤添加到新框架。

import random 
from Tkinter import * 

root = Tk() 

w = Label(root, text="GAME") 
w.pack(side=TOP) 
frameContainer=[] 
frameContainer.append(Frame(root,height=100)) 
frameContainer[-1].pack() 
# there are 40 tiles 
tiles_letter = ['a', 'b', 'c', 'c', 'c', 'd', 'd', 'e', 'e', 'e', 'e', 'f', 'f', 'g', 'g', 'h', 'i', 'j', 'k', 'k', 'a', 'b', 'c', 'c', 'c', 'd', 'd', 'e', 'e', 'e', 'e', 'f', 'f', 'g', 'g', 'h', 'i', 'j', 'k', 'k'] 

tiles_make_word = [] 

def add_letter(): 
    global frameContainer 
    if not tiles_letter: 
     return 
    rand = random.choice(tiles_letter) 
    tiles_make_word.append(rand) 
    print(len(tiles_make_word)) 
    tile_frame_column = Label(frameContainer[-1], text=rand, bg="red", fg="white") 
    tile_frame_column.pack(side=LEFT, padx=5, pady=10) 
    tiles_letter.remove(rand) # remove that tile from list of tiles 
    print len(tiles_make_word),'***********' 
    if len(tiles_make_word) % 10 == 0: 
     frameContainer.append(Frame(root,height=100)) 
     frameContainer[-1].pack() 
    root.after(500, add_letter) 

root.after(500, add_letter) 

root.mainloop() 
+0

謝謝!它完美的作品!感謝您的幫助和見解 – user2456977 2014-09-10 10:17:44