Есть ли способ добавить метку между двумя другими метками?

В другом проекте у меня есть куча меток, которые обновляются всякий раз, когда дается список строк. Но если бы я захотел добавить в этот список строку и показать это с помощью меток, мне пришлось бы их все уничтожить и переделать заново. Чтобы упростить его, приведенный ниже код является моей отправной точкой.

from tkinter import *
  
root = Tk()
a = Label(root, text ="Hello World")
a.pack()

b = Label(root, text = "Goodbye World")
b.pack()

# third label to add between label A and B
  
root.mainloop()

Есть ли какая-то функция вставки или другой способ решить эту проблему?

Обновлено: ответ Брайана Окли:

Следует использовать параметр «до/после» в пакете этикеток.

# third label to add between label A and B
c = Label(root, text="Live long and prosper")
c.pack(before=b)

Вы можете использовать методы .tkraise() и .lower() для изменения порядка виджетов в их родительском контейнере — например, после создания третьей метки выполните b.tkraise(), чтобы новая метка оказалась посередине.

jasonharper 17.05.2022 22:57

@jasonharper: нет, это не то, чем занимаются .tkraise() и .lower(). Эти методы изменяют порядок размещения по оси Z, а не порядок упаковки по оси Y.

Bryan Oakley 17.05.2022 23:05
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
2
20
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не совсем уверен, что это то, что вы имели в виду в своем вопросе, но если вы хотите вставить третью метку между Label1 и Label2 (a, b), просто вставьте ее вручную.

from tkinter import *

root = Tk()
a = Label(root, text="Hello World")
a.pack()

# third label to add between label A and B
c = Label(root, text="Middle Label")
c.pack()

b = Label(root, text="Goodbye World")
b.pack()

root.mainloop()

таким образом, это будет отображаться на экране между a и b. и если вы хотите вставить новый текст в уже существующую метку, вы можете просто использовать метод .configure() для изменения текста конкретной метки в любое время, например так:

from tkinter import *

lst = ["Oof"]

root = Tk()
a = Label(root, text="Hello World")
a.pack()

# third label to add between label A and B
c = Label(root, text="Middle Label")
c.pack()

b = Label(root, text="Goodbye World")
b.pack()

# Here I will add a simple code that asks the user to enter a number 
# between one and ten, if it's between those numbers then change the
# text to "Nice Choice!" else to first element of the list called lst
guess = int(input("Enter a number (1 - 10): "))

if 1 <= guess <= 10:
    c.configure(text="Nice choice!")
else:
    c.configure(text=f"{lst[0]}")  # Using f string

root.mainloop()

Да, я не хотел добавлять вручную, потому что метки A и B будут добавлены при запуске программы, а метка C будет добавлена ​​при вводе пользователем. Но все равно спасибо

Pardus 17.05.2022 23:09
Ответ принят как подходящий

Порядок, в котором вы вызываете pack, имеет значение, поскольку он устанавливает порядок, в котором виджеты появляются относительно друг друга. pack также предоставляет аргументы для изменения этого порядка. Вы можете указать before, чтобы добавить виджет перед другим виджетом, и after, чтобы разместить виджет после.

Этот код помещает третью метку перед виджетом b:

# third label to add between label A and B
c = Label(root, text="Live long and prosper")
c.pack(before=b)

Этот код размещает третью метку после виджета a:

# third label to add between label A and B
c = Label(root, text="Live long and prosper")
c.pack(after=a)

screenshot

Я знал, что должен быть способ сделать это. Плохо, что я посмотрел на родительские виджеты для функции вставки или чего-то в этом роде. Благодарю вас!

Pardus 17.05.2022 23:10

Другие вопросы по теме