2014-09-10 3 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 писем он создает новую строку, но это не правильно укладывать. Он больше похож на зигзаг или по диагонали, вместо того, чтобы находиться прямо под указанным рядом. Может кто-нибудь, пожалуйста, скажите мне, что не так с кодом и как я могу это исправить? Я запутался, пытаясь создать новые строки с методом «после». Может быть, ошибка имеет какое-то отношение к этому. Надеюсь, это просто. Я застрял на этом часами.

Thanks

ответ

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

Смежные вопросы