Я изучаю Tkinter и создаю простую игру-головоломку 8.
(Пример: http://www.permadi.com/java/puzzle8/)
Каждое число - это объект Canvas, помещенный в фрейм с использованием компоновки сетки. Один из объектов:добавление дополнительного отступа между объектами Canvas. Я установил ширину границы для объектов Canvas на -2, что решило проблему некоторых людей, но это немного уменьшило дополнительные отступы для меня. Установка этого значения на -4 начинает врезаться в мою область холста.
Я предполагаю, что ячейки компоновки сетки имеют некоторый отступ по умолчанию или ширину границы, но я не нашел способа удалить его. Установка значений padx, pady, ipadx, ipady при вызове grid () наПохоже, что объекты Canvas тоже не помогают.
Еще одна странность, которую я обнаружил, была при создании границы для моих объектов Canvas, я использовал create_rectangle, но мне пришлось начинать x_1 и y_1 с 4,4 вместо 0,0или 2,2, что я и ожидал бы для границы в 2 пикселя.
Вот мой код. Любая помощь / совет / обходные пути / в противном случае очень полезна
#!/usr/bin/python
from Tkinter import *
class Number(Canvas):
def __init__(self, master=None, number=1):
Canvas.__init__(self, master, width=100, height=100, bd=-2)
self.create_text(50, 50, text=str(number), anchor=CENTER)
self.create_rectangle(4, 4, 98, 98, width=2)
class Application(Frame):
def create_widgets(self):
self.playarea = Frame(self, width=300, height=300)
self.playarea.grid_propagate(0)
self.playarea.grid()
self.playarea.numbers = []
for number in xrange(1, 10):
num_obj = Number(self.playarea, number)
self.playarea.numbers.append(num_obj)
row = number // 3
col = number % 3
num_obj.grid(row=row, column=col)
def __init__(self, master=None):
Frame.__init__(self, master)
self.grid()
self.create_widgets()
def main():
app = Application()
app.master.title("Sample Application")
app.mainloop()
if __name__ == '__main__':
main()