Как присвоить разную ширину разным столбцам в виджете ввода в tkinter на основе длины текста

#python #tkinter

#python #tkinter

Вопрос:

Я извлекаю данные из MS SQL и отображаю их на Python, используя виджет ввода tkinter для графического интерфейса пользователя. Однако установка width в параметре дает всем столбцам одинаковую ширину, поэтому столбцы, содержащие ID / ключи, имеют ненужное пространство, в то время как столбцы, требующие большей ширины, имеют усеченный текст.

Вот мой код:

 class Table: 
      
    def __init__(self, root, totalRows, totalColoumns, rows): 
          
        # code for creating table 
        for i in range(totalRows): 
            for j in range(totalColoumns): 
                  
                self.e = tkinter.Entry(root, width=50, fg='blue', 
                               font=('Arial', 12)) 
                  
                self.e.grid(row=i, column=j) 
                self.e.insert(tkinter.END, rows[i][j]) 
  

здесь параметров root , totalRows , totalColoumns , rows обеспечиваются функции телефонам указанным выше фрагмент кода.

Это выходные данные всех сгенерированных столбцов, где первые два столбца являются первичным ключом и внешним ключом: Вывод

Комментарии:

1. Почему бы вам не использовать разную ширину в зависимости от столбца вместо того, чтобы использовать width=50 везде? Вы могли бы составить список ширин в зависимости от номера столбца.

2. @j_4321 Пожалуйста, извините за мои глупые вопросы, но как мне указать, что я хочу, чтобы столбец номер 3 имел ширину 80, в то время как столбцы 1 и 2 могут иметь ширину 10?

Ответ №1:

Здесь я предполагаю, что два первых столбца могут быть маленькими, например, шириной 10, в то время как все остальные будут больше, например, шириной 80.

Для достижения этого существует множество способов изменить цикл for, создающий таблицу. Например, вы можете создать список ширин:

 widths = [10, 10]   [80]*(totalColoumns - 2)

# code for creating table 
for i in range(totalRows): 
    for j in range(totalColoumns): 
          
        self.e = tkinter.Entry(root, width=widths[j], fg='blue', 
                       font=('Arial', 12)) 
          
        self.e.grid(row=i, column=j) 
        self.e.insert(tkinter.END, rows[i][j])