Tkinter не обновляет ярлыки должным образом - PullRequest
0 голосов
/ 17 декабря 2018

Это код:

for row in results:
    ColumnCounter += 1
    id_list.append(row['ID'])
    #print(id_list)  # DEBUG
    tk.Label(DisplayWindow, text=str(RowCounter - 1), fg="black", font="none 8 bold").grid(row=RowCounter, column=ColumnCounter, sticky=W)
    ColumnCounter += 1
    firstname_list.append(row['FIRST_NAME'])
    #print(firstname_list)  # DEBUG
    tk.Label(DisplayWindow, text=firstname_list[ListCounter], fg="black", font="none 8 bold").grid(row=RowCounter, column=ColumnCounter, sticky=W)
    ColumnCounter += 1
    surname_list.append(row['SURNAME'])
    #print(surname_list)  # DEBUG
    tk.Label(DisplayWindow, text=surname_list[ListCounter], fg="black", font="none 8 bold").grid(row=RowCounter, column=ColumnCounter, sticky=W)
    ColumnCounter += 1
    username_list.append(row['USERNAME'])
    #print(username_list)  # DEBUG
    tk.Label(DisplayWindow, text=username_list[ListCounter], fg="black", font="none 8 bold").grid(row=RowCounter, column=ColumnCounter, sticky=W)
    ColumnCounter += 1
    email_list.append(row['EMAIL'])
    #print(email_list)  # DEBUG
    tk.Label(DisplayWindow, text=email_list[ListCounter], fg="black", font="none 8 bold").grid(row=RowCounter, column=ColumnCounter, sticky=W)
    tk.Button(DisplayWindow, text="Select Row", command=lambda CurrentValue=row: [SelectRow(CurrentValue['ID'], CurrentValue['FIRST_NAME'], CurrentValue['SURNAME'], CurrentValue['USERNAME'], CurrentValue['EMAIL']), DisplayWindow.destroy()]).grid(row=RowCounter, column=ColumnCounter + 1, sticky=E)

    RowCounter += 1
    ColumnCounter = -1
    ListCounter += 1

Каждый раз при повторном запуске цикла for ярлыки не обновляют свои тексты должным образом.Он отображает половину материала из старого текста и половину материала из нового текста.Я пытался заменить текст на textvariable=SomeStringVariable_Name (StringVar) во всех ярлыках, но опять та же проблема.Как я могу это исправить?

(переменная результатов - это словарь. Точнее, это выборка из базы данных MySQL.)

1 Ответ

0 голосов
/ 18 декабря 2018

Перекрывающаяся проблема может быть решена путем назначения цвета фона для label и настройки параметра "sticky=W" на "sticky=W+E".

Таким образом, новый фон будет (растягиваться и)полностью закройте старый текст.

Это (я считаю) возможное решение, которое вы, возможно, нашли.Ниже приведен небольшой совет по управлению метками для получения большего контроля над метками.

Если информация в самих метках не обновляется:

Назначьте каждую метку переменной.Затем при каждом запуске цикла обновляйте информацию, используя widget.configure(option=value)

label_id_list.configure(text=str(RowCounter - 1))
label_firstname_list.configure(text=firstname_list[ListCounter])
label_surname_list.configure(text=surname_list[ListCounter])
label_username_list.configure(text=username_list[ListCounter])
label_email_list.configure(text=email_list[ListCounter])
button_email_list.configure(command=lambda CurrentValue=row: [SelectRow(CurrentValue['ID'], CurrentValue['FIRST_NAME'], CurrentValue['SURNAME'], CurrentValue['USERNAME'], CurrentValue['EMAIL']))

Информация метки будет обновляться;не нужно звонить widget.grid()

...