Отрегулируйте ширину текстовых полей в Python tkinter для случайных чисел - PullRequest
0 голосов
/ 11 февраля 2012

У меня есть следующие коды для cloumn и row в моей программе на python

def __init__(self):
    Frame.__init__(self)
    self.function = {0:self.bubble, 1:self.insertion, 2:self.selelction}
    self.master.title("Sorting")
    self.master.rowconfigure(5, weight=1)
    self.master.columnconfigure(5, weight=1)
    self.grid(sticky=W+E+N+S )

И для текстового поля для хранения случайных чисел, я использовал этот код, как будто бы имелось различное текстовое поле для каждой цифры.

def gen(self):
    self.nums = [random.randint(0, 100) for x in range(10)]
    for num in self.nums:
        i=iter(self.nums)
        item1=i.next()
        item2=i.next()
        item3=i.next()
        item4=i.next()
        item5=i.next()
        item6=i.next()
        item7=i.next()
        item8=i.next()
        item9=i.next()
        item10=i.next()
    #num = ''.join('%4i' % num for num in self.nums)
    self.text1 = Text(self,width=2, height=1)
    self.text1.grid(row =3,column=0,sticky = W+E+N+S)  
    self.text1.insert(END,item1)
    self.text2 = Text(self,width=2, height=1)
    self.text2.grid(row =3,column=1,sticky = W+E+N+S)  
    self.text2.insert(END,item2)
    self.text3 = Text(self,width=2, height=1)
    self.text3.grid(row =3,column=2,sticky = W+E+N+S)  
    self.text3.insert(END,item3)
    self.text4 = Text(self,width=2, height=1)
    self.text4.grid(row =3,column=3,sticky = W+E+N+S)  
    self.text4.insert(END,item4)
    self.text5 = Text(self,width=2, height=1)
    self.text5.grid(row =3,column=4,sticky = W+E+N+S)  
    self.text5.insert(END,item5)
    self.text6 = Text(self,width=2, height=1)
    self.text6.grid(row =3,column=5,sticky = W+E+N+S)  
    self.text6.insert(END,item6)
    self.text7 = Text(self,width=2, height=1)
    self.text7.grid(row =3,column=6,sticky = W+E+N+S)  
    self.text7.insert(END,item7)
    self.text8 = Text(self,width=2, height=1)
    self.text8.grid(row =3,column=7,sticky = W+E+N+S)  
    self.text8.insert(END,item8)
    self.text9 = Text(self,width=2, height=1)
    self.text9.grid(row =3,column=8,sticky = W+E+N+S)  
    self.text9.insert(END,item9)
    self.text10 = Text(self,width=2, height=1)
    self.text10.grid(row =3,column=9,sticky = W+E+N+S)  
    self.text10.insert(END,item10)

но его выдача, как показано ниже. как я могу исправить это.

enter image description here

Ответы [ 2 ]

0 голосов
/ 05 января 2014

Если вы посмотрите на текстовое поле с 12 в нем, вы увидите, что его размер связан со всем столбцом и строкой (ячейка над и под ним одинакового размера), так что текстовое поле - так же, как и ваш другой«плохо себя ведущие» будут растягиваться, чтобы соответствовать форматированию их столбцов.Я настоятельно рекомендую использовать функцию pack () вместо grid () для позиционирования в этой ситуации просто потому, что она позволяет форматировать каждый отдельный элемент, не затрагивая при этом другие элементы.Вы можете использовать постоянную переменную для ширины / высоты ваших текстовых полей, а затем установить каждый из их атрибутов (width = WIDTHCONSTANT, height = HEIGHTCONSTANT) и т. Д. Удачи!

0 голосов
/ 12 февраля 2012

Согласно ответу на мой комментарий, вы хотите, чтобы виджеты расширялись одинаково. Для этого при использовании сетки убедитесь, что каждый столбец имеет одинаковый вес.

Вот пример, который также показывает, как вы можете создать все эти виджеты в цикле, чтобы сократить количество строк кода:

def gen(self):
    self.nums = [random.randint(0, 100) for x in range(10)]
    self.items = []
    self.text = []

    for column, num in enumerate(self.nums):
        text = Entry(self, width=2)
        text.insert(0, num)
        text.grid(row=3, column=column, sticky="nsew")
        self.items.append(num)
        self.text.append(text)
        self.grid_columnconfigure(column, weight=1)

Обратите внимание, что в этом примере используется виджет Entry вместо виджета Text. Поскольку вам нужна только эта строка, виджет Entry - лучший выбор, поскольку он всегда допускает только одну строку текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...